xslt-stylesheet では、メソッドexsl:node-set
とset:distinct
を使用して、結果ツリー フラグメントを含む変数から一意のノードにアクセスしてフィルター処理しています。これらのノードの値を出力ファイルに書き込むことができます。例:
<xsl:variable name="myNodes">
<xsl:call-template name="getNodes"/>
</xsl:variable>
<xsl:for-each select="set:distinct(exsl:node-set($myNodes)/key)">
<xsl:value-of select="."/>
</xsl:for-each>
予想どおり、キーの値が出力に書き込まれます。ただし、XPath 式で値を使用しようとすると、失敗します。
<xsl:for-each select="set:distinct(exsl:node-set($myNodes)/key)">
<xsl:variable name="result" select="/tree//somenode[@key = current()]"/>
<xsl:value-of select="$result"/>
</xsl:for-each>
現在、出力は空ですが、input-xml に XPath 式で選択する必要がある「somenode」があり、その値が空ではないことがわかっています。
今私の質問は:なぜこれが起こるのですか?
Java 1.6、Xerces 2.7、および Xalan 2.7 を使用しています。
更新: 要求に応じて、例の一部のデータ: xml doc には以下が含まれます。
<tree>
<somenode key="123"/>
<num>123</num>
<num>0815</num>
</tree>
getNodes テンプレート:
<xsl:template name="getNodes">
<xsl:for-each select="/tree/num">
<xsl:element name="key">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:template>