如何使用 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>

【讨论】:

嗨马丁,感谢您的解决方案。但是在放置条件属性之后,就会错过并且没有响应。例如样品请求:============================================== ====== false @Diya,我没有编写原始代码,我只是适应了您在原始问题中提供的输入示例和所需输出。如果您更改您的要求最好在一个新问题中描述您的输入,您使用的代码为您提供的输出,您需要的输出更改,以及您调整 XSLT 的尝试以及它是如何失败的,即不需要的输出。

以上是关于如何使用 XSLT 将单个子 xml 元素转换为 Json 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 XSLT 将 XML 转换为 CSV,用于在单个标记中以空格分隔的多个记录

使用 XSLT 将 XML 元素转换为 XML 属性

如何获取具有相同名称的元素并根据 XSLT 中的子节点值对它们进行排序

使用XSLT将XML转换为csv

使用 XSLT 进行空前缀转换的 XML [重复]

如何使用 XSLT 制作 xml 节点的子节点的精确副本?