Я пытаюсь добавить элементы с запятой и пробелом в <album>
, если это не последний <album>
внутри родителя <recording>
.Добавление пунктуации во вложенные шаблоны
У меня есть аналогичный шаблон для <recording>
s, который работает должным образом. Тем не менее, я не могу заставить второй шаблон для пунктуации <album>
работать правильно.
Я считаю, что есть что-то сделать, чтобы с первого шаблона существующего ...
Входной XML
<sample>
<collection>
<recording>
<artist>Radiohead</artist>
<album>OK Computer</album>
</recording>
<recording>
<artist>Tori Amos</artist>
<album>Boys For Pele</album>
<album>To Venus And Back</album>
</recording>
</collection>
Пример XSLT
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="collection">
<xsl:copy>
<xsl:for-each select="recording">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
<xsl:if test="position()!=last()">
<xsl:element name="x">, </xsl:element>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>
<xsl:template match="recording">
<xsl:copy>
<xsl:for-each select="album">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
<xsl:if test="position()!=last()">
<comma>, </comma>
</xsl:if>
</xsl:for-each>
</xsl:copy>
</xsl:template>
Но мой выход
<sample>
<collection>
<recording>
<artist>Radiohead</artist>
<album>OK Computer</album>
</recording><x>, </x>
<recording>
<artist>Tori Amos</artist>
<album>Boys For Pele</album>
<album>To Venus And Back</album>
</recording>
</collection>
Вместо того, что я хочу (обратите внимание на <x>
после первого <album>
во втором <recording>
)
<sample>
<collection>
<recording>
<artist>Radiohead</artist>
<album>OK Computer</album>
</recording><x>, </x>
<recording>
<artist>Tori Amos</artist>
<album>Boys For Pele</album><x>, </x>
<album>To Venus And Back</album>
</recording>
</collection>
</sample>
Спасибо большое за кратким объяснением. Это было очень полезно и принесло желаемый результат. Я знал, что есть какой-то цикл, который мне нужно было обойти с этими двумя шаблонами. – user2093335