私はここで何かが欠けていることを知っています。以下の XSLT 変換では、実際の結果は目的の結果と一致しません。
の中で、選択した各要素にテンプレートをfor-each
適用したいと思います。XSLT を正しく理解していれば、現在のセットアップでは、要素自体ではなく、選択された各要素の子ノードのみがテンプレートと照合されます。match="track"
track
track
track
track
要素が必要に応じてテンプレートを通過するようにするにはどうすればよいですか? アプローチ全体を再考する必要がありますか?
注: 変換は PHP を使用して実行されます。簡潔にするために、XML 宣言は省略されています。
XML ドキュメント:
<album>
<title>Grave Dancers Union</title>
<track id="shove">Somebody To Shove</track>
<track id="gold">Black Gold</track>
<track id="train">Runaway Train</track>
<producer>Michael Beinhorn</producer>
</album>
XSL スタイルシート:
<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/album">
<ol>
<xsl:for-each select="track">
<li><xsl:apply-templates/></li>
</xsl:for-each>
</ol>
</xsl:template>
<xsl:template match="track">
<a href="{@id}"><xsl:apply-templates/></a>
</xsl:template>
</xsl:stylesheet>
結果:
<ol>
<li>Somebody To Shove</li>
<li>Black Gold</li>
<li>Runaway Train</li>
</ol>
望ましい結果:
<ol>
<li><a href="shove">Somebody To Shove</a></li>
<li><a href="gold">Black Gold</a></li>
<li><a href="train">Runaway Train</a></li>
</ol>