Please help me out guys. I'm just trying to declare a simple result tree fragment and iterate over it.
...
<xsl:variable name="rtf">
<item-list>
<item id="1">one</item>
<item id="2">two</item>
<item id="3">three</item>
<item id="4">four</item>
</item-list>
</xsl:variable>
<xsl:for-each select="msxsl:node-set($rtf)/item-list/item">
<xsl:value-of select="@id"/>
</xsl:for-each>
...
Am I completely mistaken about how this works?
Edit: I'm using .NET XslCompiledTransform and have the correct msxsl namespace declarations - xmlns:msxsl="urn:schemas-microsoft-com:xslt"
The transformating executes fine - the problem is that nothing is output
This looks OK to me.
Have you correctly declared the msxsl namespace for the extension functions though? Something like this:
I am assuming you are using the Microsoft XSLT processor here
Unlike MSXSL,
XslCompiledTransform
providesnode-set()
function where it is supposed to be - in EXSLT Common namespace:My suspicion is that you have a default namespace declared in your stylesheet. That would effectively place the <item-list> and <item> elements into a namespace. To select namespace-qualified elements using XPath 1.0, you must always use a prefix in the expression.
So if you have something like this at the top of your stylesheet:
Then you'll need to also add this:
And then use the "x" prefix in your XPath expression:
Let me know if that did the trick. I'm only speculating here.