如何使用 XSLT 将单个子 xml 元素转换为 Json 数组
Posted
技术标签:
【中文标题】如何使用 XSLT 将单个子 xml 元素转换为 Json 数组【英文标题】:How to convert single child xml element to Json Array using XSLT 【发布时间】:2021-08-11 21:18:14 【问题描述】:我正在使用通用 xslt(http://www.bizcoder.com/convert-xml-to-json-using-xslt) 将 xml 转换为 json,当请求中有多个数组元素时它工作得很好,现在我想转换一个特定的 xml 元素,即使它有单个子元素。对于示例:
示例 XML
<messages>
<message>
<to>Karim</to>
<from>Tom</from>
<heading>Reminder</heading>
<body>Please check your email !</body>
</message>
</messages>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Info id="10485824">
<Data tipus="11" megnevezes="APEH hátralék (rendezetlen)">
<Value num="1" subtype="xbool">false</Value>
</Data>
</Info>
</Response>
示例 JSON:
"messages":
"message": [
"to": "Karim",
"from": "Tom",
"heading": "Reminder",
"body": "Please check your email !"
]
我们可以在 xslt 中添加任何内容来仅过滤此元素以始终作为 json 数组返回吗?
【问题讨论】:
【参考方案1】:将创建数组的条件改为
<!-- Object Properties -->
<xsl:template name="Properties">
<xsl:variable name="childName" select="name(*[1])"/>
<xsl:choose>
<xsl:when test="not(*|@*)">"<xsl:value-of select="."/>"</xsl:when>
<xsl:when test="$childName = 'message' or count(*[name()=$childName]) > 1"> "<xsl:value-of select="$childName"/>" :[<xsl:apply-templates select="*" mode="ArrayElement"/>] </xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="*"/>
</xsl:otherwise>
</xsl:choose>
<xsl:if test="following-sibling::*">,</xsl:if>
</xsl:template>
【讨论】:
嗨马丁,感谢您的解决方案。但是在放置条件属性之后,就会错过并且没有响应。例如样品请求:============================================== ======以上是关于如何使用 XSLT 将单个子 xml 元素转换为 Json 数组的主要内容,如果未能解决你的问题,请参考以下文章
使用 XSLT 将 XML 转换为 CSV,用于在单个标记中以空格分隔的多个记录