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,

War es hilfreich?

Lösung

Mein Verdacht ist, dass Sie einen Standardnamespace in Ihrem Stylesheet deklariert haben. Das würde die effektiv platzieren und -Elemente in ein Namespace. So wählen Sie Namespace-qualifizierte Elemente mit XPath 1.0, müssen Sie immer einen Präfix im Ausdruck verwendet werden.

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.

scroll top