特定のIDの子ノードを含むすべてのノードをリストしようとしています。
次の xml の例を見てください。
<foo>
<bar name="hello">
<baz id="1" />
</bar>
<bar name="there">
<baz id="1" />
<baz id="2" />
</bar>
<bar name="world">
<baz id="3" />
</bar>
</foo>
for-each
ネストされた 2 つのループを含む次の XSLT テンプレートを思いつきました
<xsl:for-each select="/foo/bar/baz">
<xsl:variable name="id" select="@id" />
<xsl:value-of select="$id" />
<ul>
<xsl:for-each select="/foo/bar/baz">
<xsl:variable name="local_id" select="@id" />
<xsl:variable name="bar_name" select="../@name" />
<xsl:if test="$id = $local_id">
<li><xsl:value-of select="$bar_name" /></li>
</xsl:if>
</xsl:for-each>
</ul>
</xsl:for-each>
次の結果が得られます
1
- hello
- there
1
- hello
- there
2
- there
3
- world
問題は、最初のキーと値のペアが重複していることです。