我想使用 xslt 1.0 从我的输入 xml 中获得低于输出。你能建议一种方法来做到这一点吗?
Input xml:
<result>
<item0>
<Name>Customer1</Name>
<location>1360190</location>
</item0>
<item1>
<Name>Customer2</Name>
<location>1360190</location>
</item1>
</result>
Output xml:
<result>
<item>
<Name>Customer1</Name>
<location>1360190</location>
</item>
<item>
<Name>Customer2</Name>
<location>1360190</location>
</item>
</result>
如@LingamurthyCS所述,请考虑使用标识转换和模板来重命名具有各种 XPath 匹配引用<item>
节点,如下所示:
使用结果参考和子元素上的应用模板:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<!-- Identity Transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="result/*">
<item>
<xsl:apply-templates select="*"/>
</item>
</xsl:template>
</xsl:transform>
没有结果引用和子元素的副本:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<!-- Identity Transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/*">
<item>
<xsl:copy-of select="*"/>
</item>
</xsl:template>
</xsl:transform>
带项目参考:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output version="1.0" encoding="UTF-8" indent="yes" method="xml"/>
<xsl:strip-space elements="*"/>
<!-- Identity Transform -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="*[contains(name(), 'item')]">
<item>
<xsl:apply-templates />
</item>
</xsl:template>
</xsl:transform>