想要使用 XSLT 从 Xml 属性中获取价值
Posted
技术标签:
【中文标题】想要使用 XSLT 从 Xml 属性中获取价值【英文标题】:Wants to get value from Xml Attribute using XSLT 【发布时间】:2021-10-18 17:10:53 【问题描述】:<Document1>
<DocumentRequest Application="Standard">
<Doc Format="Pdf">
<Variable Name="CUST" Value = "Aman" Type="String/>
<Variable Name="DPID" Value = "7488493" Type="String/>
<Variable Name="NA Number" Value = "Aman" Type="String/>
<Variable Name="DELTA" Value = "Test" Type="String/>
</Doc>
</DocumentRequest>
</Document1>
这是我的 XML 我想从变量标签中获取 Name 属性的值并将其分配给不同的变量。输出应该是 -
"var1":"Aman",
"var2":"7488493",
"var3":"Aman",
"var4":"Test",
我想编写 XSLT 来做到这一点。如何编写 XSLT 并分配这些值?
【问题讨论】:
请就您在尝试完成此操作时遇到的困难提出一个具体问题。否则看起来你只是在找人为你编写代码。 那是什么结果格式?你说你想“分配给不同的变量”。使用哪种语言? 【参考方案1】:只要你只有一级Variable
s,你就可以使用这个简单的XSLT-1.0样式表:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" />
<xsl:strip-space elements="*" />
<xsl:template match="/Document1/DocumentRequest/Doc[@Format='Pdf']">
<xsl:text>
</xsl:text>
<xsl:for-each select="Variable">
<xsl:value-of select="concat(' "var',position(),'":"',@Value,'"')" />
<xsl:if test="position()!=last()"><xsl:text>,
</xsl:text></xsl:if>
</xsl:for-each>
<xsl:text>
</xsl:text>
</xsl:template>
</xsl:stylesheet>
它的输出是
"var1":"Aman",
"var2":"7488493",
"var3":"Aman",
"var4":"Test"
上面的代码匹配指定的Doc
元素,然后遍历所有Variable
元素。因为样式表是 XSLT 1.0 版,所以它应该可以在 Java 的 XSLT 处理器中运行,而不需要进一步复杂化。
我添加了一个xsl-if
-clause 以省略最后一个元素后的逗号,使其更像 JSON。
【讨论】:
以上是关于想要使用 XSLT 从 Xml 属性中获取价值的主要内容,如果未能解决你的问题,请参考以下文章