Я новичок в XSLT и пытаюсь применить шаблон к определенному узлу, который достигается с помощью вложенных функций for-each.
Я попытался упростить его и переместил apply-templatesтолько 1 для каждого и там я получил его на работу.
Это мой пример ввода xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<getPartMasterDataCompleteResponse >
<result>
<partMasterDataCompletes>
<partMasterDataComplete>
<part>A0001506450</part>
<version>11</version>
<partMasterData>
<language>german</language>
<part>A1234567890</part>
<releaseDateFrom>2018-09-06T08:52:18+02:00</releaseDateFrom>
<testTag>
<test></test>
<test></test>
<test></test>
</testTag>
</partMasterData>
</partMasterDataComplete>
</partMasterDataCompletes>
</result>
</getPartMasterDataCompleteResponse>
Это xslt, который я использую:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="getPartMasterDataCompleteResponse/result/partMasterDataCompletes">
<xsl:for-each select="partMasterDataComplete">
<Part>
<UserData>
<xsl:for-each select="partMasterData/*">
<xsl:if test="not(*)">
<xsl:choose>
<xsl:when test="local-name() = 'part'">
<xsl:apply-templates select="part"/>
</xsl:when>
<xsl:otherwise>
<UserValue>
<xsl:attribute name="title">
<xsl:value-of select="local-name()"/>
</xsl:attribute>
<xsl:attribute name="value">
<xsl:value-of select="current()"/>
</xsl:attribute>
</UserValue>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:for-each>
</UserData>
</Part>
</xsl:for-each>
</xsl:template>
<xsl:template match="part">
<UserValue title="PartNumber">
<xsl:attribute name="value">
<xsl:value-of select="current()"/>
</xsl:attribute>
</UserValue>
</xsl:template>
</xsl:stylesheet>
Результат, который я получаю от инструментов онлайн-трансформации:
<Part>
<UserData>
<UserValue title="language" value="german"/>
<UserValue title="releaseDateFrom" value="2018-09-06T08:52:18+02:00"/>
</UserData>
</Part>
Я ожидал бы:
<Part>
<UserData>
<UserValue title="language" value="german"/>
<UserValue title="PartNumber" value="A0001506450"/>
<UserValue title="releaseDateFrom" value="2018-09-06T08:52:18+02:00"/>
</UserData>
</Part>
Любая помощь приветствуется.
Спасибо