Я знаю, что мне что-то не хватает. В приведенном ниже преобразовании 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 Stylesheet:
<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>
Хорошая уловка при сортировке. Я думаю, это лучшее решение из-за сортировки. – ndim
Я мог бы поклясться, что я уже пробовал это, но, думаю, нет. Это именно то, что я искал! – Jakob