[Home] [By Thread] [By Date] [Recent Entries]
see the comments about != in the recent thread on text() (if you
followed it that far:-)
Applying != to sequences that you do not know have exactly 1 element is well defined but rarely useful. Given <x> <elem x="1"/> <elem x="1"/> <elem x="2"/> <elem/> <elem x="3"/> </x> compare the results of <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
test1="{@x != preceding-sibling::elem[1]/@x}"
test2="{not(@x = preceding-sibling::elem[1]/@x)}"
test3="{string(@x) != preceding-sibling::elem[1]/string(@x)}"
test4="{not(string(@x) = preceding-sibling::elem[1]/string(@x))}"
>
<xsl:copy-of select="@*"/>
</elem>
</xsl:template>
</xsl:stylesheet>you get: <elem test1="false" test2="true" test3="false" test4="true" x="1"/> <elem test1="false" test2="false" test3="false" test4="false" x="1"/> <elem test1="true" test2="true" test3="true" test4="true" x="2"/> <elem test1="false" test2="true" test3="true" test4="true"/> <elem test1="false" test2="true" test3="true" test4="true" x="3"/> Note that string() ensures that you get exactly one value (a possibly empty string) rather than @x which may return a sequence of length 0 or 1. David
|

Cart



