я должен преобразовать этот пример XML в XSLT 1.0 или XSLT 2.0 Источник XMLXSLT для печати значений узла на основе его позиции повторно
<root>
<group>
<subgroup>
<name>AAA1</name>
</subgroup>
<subgroup>
<name>AAA2</name>
</subgroup>
<subgroup>
<name>AAA3</name>
</subgroup>
</group>
<group>
<subgroup>
<name>BB1</name>
</subgroup>
<subgroup>
<name>BB2</name>
</subgroup>
<subgroup>
<name>BB3</name>
</subgroup>
</group>
</root>
Обязательный XML OUTPUT
<?xml version="1.0" encoding="UTF-8"?>
<root>
<group>AAA1|BB1|AAA2|BB2|AAA3|BB3</group>
</root>
Я пробовал следующие xslt:
XSLT
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" />
<xsl:template match="root">
<root>
<group>
<xsl:for-each select="group">
<xsl:for-each select="subgroup">
<xsl:choose>
<xsl:when test="position() != last()">
<xsl:value-of select="name" /><xsl:text>|</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="name" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:for-each>
</group>
</root>
</xsl:template>
</xsl:stylesheet>
ток-выход
<?xml version="1.0" encoding="UTF-8"?>
<root>
<group>AAA1|AAA2|AAA3BB1|BB2|BB3</group>
</root>
Как я могу это сделать? Должен ли я создать шаблон для вызова его рекурсивно?
Известны ли, что группы равны по размеру? –
Кстати, вы задали 5 вопросов перед этим, но приняли ответ только на один из них. Почему это? –
@michael Число групп постоянное (6). Спектр внутри них динамический. Плохо, я принял еще два вопроса. Один из них по-прежнему открыт. – HeisenBerg