【发布时间】:2019-06-14 13:42:19
【问题描述】:
XSL 样式表正在生成重复输出。下面是一个例子。同样的事情重复三次。在第一组 xml 中,我只获取第一个属性的值,第二个属性的值,依此类推。
<?xml version="1.0" encoding="UTF-8"?>
<obj>
<desc value="113662176"/>
<index value="" name="MATERIALNUMMER"/>
<index value="" name="DOKUMENTENART"/>
</obj>
<obj>
<desc value=""/>
<index value="66260383180" name="MATERIALNUMMER"/>
<index value="" name="DOKUMENTENART"/>
</obj>
<obj>
<desc value=""/>
<index value="" name="MATERIALNUMMER"/>
<index value="Fertigungsauftrag" name="DOKUMENTENART"/>
</obj>
我也厌倦了 xsl when and choose 但输出是一样的。下面是一个带有一些属性的示例输入 xml。
<?xml version = "1.0" encoding = "utf-8"?>
<root>
<document>
<field level = "document" name = "Fertigungsauftragsnummer" value = "113662176"/>
<field level = "document" name = "Materialnummer" value = "66260383180"/>
<field level = "document" name = "Dokumentenart" value = "Fertigungsauftrag"/>
</document>
</root>
下面是我用于转换的 xsl 样式表。在 xsl 模板中,如果我使用 match="/*" 我不会得到重复的输出,我也不会得到 xml 属性的值。如果我们有一个特定的输出,似乎对于每个 xsl。如何使 xsl 样式表只编译一次所有 xsl if 语句的输入 xml?
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/root/document/*">
<xsl:text>
</xsl:text><xsl:text disable-output-escaping="yes"><</xsl:text><xsl:text>obj</xsl:text><xsl:text disable-output-escaping="yes">></xsl:text><xsl:text>
</xsl:text>
<xsl:text disable-output-escaping="yes"><</xsl:text><xsl:text>desc value="</xsl:text>
<xsl:if test="@name='Fertigungsauftragsnummer'">
<xsl:value-of select="@value" />
<xsl:if test="@name='Materialnummer'">
<xsl:value-of select="@value" />
<xsl:if test="@name='Dokumentenart'">
<xsl:value-of select="@value" />
</xsl:if>
</xsl:if>
</xsl:if>
<xsl:text disable-output-escaping="yes">"/></xsl:text><xsl:text>
</xsl:text>
<xsl:text disable-output-escaping="yes"><</xsl:text><xsl:text>/obj</xsl:text><xsl:text disable-output-escaping="yes">></xsl:text><xsl:text>
</xsl:text>
</xsl:template>
</xsl:transform>
预期输出如下所示
<?xml version="1.0" encoding="UTF-8"?>
<obj>
<desc value="113662176"/>
<index value="66260383180" name="MATERIALNUMMER"/>
<index value="Fertigungsauftrag" name="DOKUMENTENART"/>
</obj>
【问题讨论】:
标签: xslt