Ich habe einen Knotenmenge in einer Variablen gespeichert, wie untenWie bekomme ich den Knoten von einem Knotensatz, der einem Attributwert entspricht?
<xsl:variable name="myXML">
<list>
<input name="First" elementName="FirstName" option="one" />
<input name="Second" elementName="SecondName" option="Two" />
<input name="Third" elementName="ThirdName" option="Three" />
<input name="Fourth" elementName="FourthName" option="Four" />
</list>
</xsl:variable>
My Code abruft unter den Knoten und seine Attribute korrekt. Aber die for-each im folgenden Code wiederholt sich auch nach dem Finden der Übereinstimmung, bis es den letzten <input>
Knoten erreicht. Also, wenn ich eine große Liste mit vielen <input>
Knoten in meinem Knoten-Set habe, kann es zu Leistungsproblemen führen. Ich muss den untenstehenden Code viel einfacher re-Faktor, möglicherweise ohne For-Each.
<xsl:template match="/">
<xsl:variable name="checkName" select="'Third'" />
<xsl:variable name="getNode">
<xsl:for-each select="$myXML/list/input">
<xsl:if test="./@name=$checkName">
<xsl:copy-of select="." />
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="element" select="$getNode/input/@elementName" />
<xsl:variable name="option" select="$getNode/input/@option" />
<element><xsl:value-of select="$element" /></element>
<option><xsl:value-of select="$option" /></option>
</xsl:template>
Alles, was ich wollte, ist, habe ich eine Eingangsgröße Checkname = „Third“ und ich brauche, um den Wert des ‚element‘ Attribute und ‚Option‘ in zwei verschiedenen Variablen, die den Wert im Namensattribut entspricht der der <input>
Knoten. Bitte helfen Sie mir mit einer Lösung und ich möchte auch nicht Exslt oder andere Erweiterungen verwenden.
Welche XSLT 1.0 Prozessor verwenden Sie? In meinem Verständnis von XSLT 1.0 ist die Variable mit dem Namen 'myXML' vom Typ result tree fragment, und doing' for-select = "$ myXML/list/input" 'sollte bei einem XSLT 1.0-Prozessor einen Fehler verursachen. –
Gute Frage, +1. Sehen Sie meine Antwort für eine einfache Lösung, die viel kürzer und effizienter als Ihr aktueller Code ist. :) –