Я знаю, что я что-то здесь упускаю. В приведенном ниже преобразовании 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>