XSL msxsl: Knotenmenge Problem
Frage
Bitte helfen Sie mir Jungen. Ich versuche nur, ein einfaches Ergebnisbaum-Fragment zu erklären und iterieren es.
...
<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>
...
Bin ich völlig falsch, wie das funktioniert?
Edit: Ich verwende .NET XslCompiledTransform und haben die richtigen msxsl Namespace-Deklarationen - xmlns: msxsl = "urn: schemas-microsoft-com: xslt"
Die transformating führt in Ordnung - das Problem ist, dass nichts ausgegeben wird,
Lösung
Mein Verdacht ist, dass Sie einen Standardnamespace in Ihrem Stylesheet deklariert haben. Das würde die
Also, wenn Sie so etwas wie dies an der Spitze Ihres Sheet haben:
<xsl:stylesheet xmlns="http://example.com"...>
Dann müssen Sie auch hinzufügen:
<xsl:stylesheet xmlns="http://example.com" xmlns:x="http://example.com"...>
Und dann verwenden Sie den "x" Präfix in Ihrem XPath-Ausdruck:
<xsl:for-each select="msxsl:node-set($rtf)/x:item-list/x:item">
<xsl:value-of select="@id"/>
</xsl:for-each>
Lassen Sie mich wissen, ob das den Trick. Ich bin nur hier zu spekulieren.
Andere Tipps
Im Gegensatz zu MSXSL stellt XslCompiledTransform
node-set()
Funktion, wo es soll - in EXSLT gemeinsamen Namespace:
<xsl:stylesheet xmlns:exslt="http://exslt.org/common">
...
<xsl:for-each select="exslt:node-set($rtf)/item-list/item">
...
</xsl:stylesheet>
Das sieht nicht gut aus für mich.
Haben Sie erklärt richtig msxsl Namespace für die Erweiterungsfunktionen obwohl? So etwas wie folgt aus:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
Ich gehe davon aus Sie den Microsoft XSLT-Prozessor hier
verwenden