[Home] [By Thread] [By Date] [Recent Entries]
Ian,
Actually the reason this isn't working is has nothing to do with the processor: <xsl:template match="foo[ my:test('type1',.) = true ]"> The predicated expression "my:test('type1',.) = true" is testing the value returned by the function to the value of the 'true' element child. But there is no foo/true to compare to, hence it's always false. If you had foo[ my:test('type1',.) = 'true' ] you'd have better luck. On the other hand, this might be even better: <xsl:function name="my:test" as="xs:boolean">
<xsl:param name="fmtcode"/>
<xsl:param name="context"/>
<xsl:sequence select="(substring-after($context/@format,':') = $fmtcode)
and
(namespace-uri-for-prefix(substring-before($context/@format,':'),$context)
= 'http://example.com/schemas/formats' )/>
</xsl:function>... and then <xsl:template match="foo[ my:test('type1',.)]"> (That is, instead of generating and comparing a string, simply generate a Boolean value.) The @as element indicating the return type of the function is not strictly necessary, but is good practice for several reasons including ease of debugging (you will need to declare the xs: namespace prefix with the XML Schema namespace).
|

Cart



