如何使用 xslt 转换 xml?
Posted
技术标签:
【中文标题】如何使用 xslt 转换 xml?【英文标题】:How to convert xml using xslt? 【发布时间】:2021-12-22 23:41:45 【问题描述】:输入 XML 文件:
<a>
<Item key="1">
<c1>
<d11>
</d11>
<d12 value="1" />
<d13 />
</c1>
</Item>
<b2>
<Item key="fix">
<d21>
</d21>
<d22 value="yes" />
<d23 />
</Item>
</b2>
<b3>
<c3>
<d31>
</d31>
<Item key="price">
<e2 value="no" />
<e3 />
</Item>
</c3>
</b3>
</a>
如何编写 .xsl 样式表以使输出如下所示:
a/Item [@key='1']/c1/d12/@value
a/b2/Item [@key='fix']/d22/@value
a/b3/с2/Item[@key='price']/e2/@value
也就是说,带有@value 属性的标签的完整路径可以包含带有key 属性的特殊值的Item 标签。
【问题讨论】:
您的输入没有value
属性。在这里查看如何生成节点的路径:***.com/a/65293329/3016153
抱歉,修复了输入xml文件中的value属性
好。现在您有了一个示例,因此如果您在尝试后遇到困难,我们可以修复它,而不必从头开始为您编写代码。
不明白如何在具有@value 属性的节点处停止
xsltfiddle.liberty-development.net/jxWVfBU/3
【参考方案1】:
来点简单的怎么样:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="/">
<xsl:for-each select="//@value">
<xsl:for-each select="ancestor::*">
<xsl:value-of select="name()"/>
<xsl:if test="@key">
<xsl:text>[@key="</xsl:text>
<xsl:value-of select="@key"/>
<xsl:text>"]</xsl:text>
</xsl:if>
<xsl:text>/</xsl:text>
</xsl:for-each>
<xsl:text>@value </xsl:text>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
【讨论】:
以上是关于如何使用 xslt 转换 xml?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 XSLT 将单个子 xml 元素转换为 Json 数组
XSLT:如何使用 XSLT 1.0 和 XALAN 处理器转换部分转义的 XML?