Wiem, że czegoś tutaj brakuje. W poniższej transformacji XSLT rzeczywisty wynik nie pasuje do pożądanego wyniku.Jak zastosować szablony do każdego wybranego węzła w jednostce for?
Wewnątrz for-each
, chcę zastosować szablon match="track"
do każdego wybranego elementu track
. Jeśli zrozumiałem XSLT poprawnie, z bieżącą konfiguracją tylko węzły podrzędne każdego wybranego elementu są dopasowane do szablonów, a nie same do siebie elementy track
.
Jak ustawić elementy track
przez szablon zgodnie z potrzebami? Czy muszę przemyśleć całe moje podejście?
Uwaga: Transformacja jest wykonywana przy użyciu PHP. Deklaracje XML zostały pominięte dla zwięzłości.
XML Document:
<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>
Wynik:
<ol>
<li>Somebody To Shove</li>
<li>Black Gold</li>
<li>Runaway Train</li>
</ol>
pożądany rezultat:
<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>
Dobry połów na sortowanie. Sądzę, że to najlepsze rozwiązanie, ze względu na sortowanie. – ndim
Mogłem przysiąc, że już to wypróbowałem, ale chyba nie. Tego właśnie szukałem! – Jakob