は、私は私のコードは、以下の正しくノードを取得し、その属性属性値と一致するノードセットからノードを取得する方法はありますか?
<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>
下のように変数に格納されたノードセットを持っています。 しかし、次のコードのfor-eachは、最後の
<input>
ノードに達するまで、一致を見つけた後でも繰り返されます。 ノードセットに多くの
<input>
ノードがある大きなリストがあると、パフォーマンス上の問題が発生する可能性があります。 私は以下のコードをもっと簡単に再因子化する必要があり、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>
iは、iの入力変数checkName =「三」を持っていると私は、属性のがelementName 'とのname属性の値と一致した二つの異なる変数で「オプション」の値を必要と望んでいたすべての<input>
ノード。ソリューションで私を助けてくださいまた、私はexsltやその他の拡張子を使用したくない。
XSLT 1.0プロセッサ使っています:
スタイルシートは大幅にシンプルなXPathステートメントを使用する
for-each
、余分な変数を除去することにより、簡素化することができますか? XSLT 1.0についての私の理解では、 'myXML'という名前の変数は結果ツリーの断片であり、for-each select =" $ myXML/list/input "を実行すると、XSLT 1.0プロセッサでエラーが発生するはずです。 –良い質問、+1。あなたの現在のコードよりはるかに短くて効率的な簡単な解決策については私の答えを見てください。 :) –