我知道我在这里漏掉了一些东西。 在下面的XSLT转换中,实际结果与期望结果不匹配。
在 for-each
中,我想将 match="track"
模板应用于每个选定的 track
元素。 如果我正确理解了XSLT,则当前设置仅针对每个选定的 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>