繁体   English   中英

wso2 将 xml 转换为 json 与数组

[英]wso2 convert xml to json with array

我正在尝试使用 xslt 将 xml 转换为 json。 当我有单个节点时,JSON output 不包含数组,但是当它有多个节点时,它将显示为数组

如果我有单个报告条目,则 JSON output 如下(缺少数组):

XML:

<Report_Data>
    <Report_Entry>
        <ID>0025440</ID>
    </Report_Entry>
</Report_Data>

结果:

{
    "Report_Data": {
        "Report_Entry": 
            {  "ID": "0025440" }
    }
}

当我在 XML 中有多个条目时,output 如下(存在数组):

XML:

<Report_Data>
    <Report_Entry>
        <ID>0025440</ID>
    </Report_Entry>
    <Report_Entry>
        <ID>00254401</ID>
    </Report_Entry>
</Report_Data>

结果:

{
    "Report_Data": {
        "Report_Entry": [
            { "ID": "0025440" },
            { "ID": "0025441" }
        ]
    }
}

这是一个示例输入 XML 文件试图在 WSo2 中添加 Arrays。 这无法在 JSON output 中添加数组。

a345ea1b59d c867b9511fa201

CCH2 c867b9511fa201 c867b9511fa201 5005854

 <xyz:AStatus xyz:Descriptor="Pending"> <xyz:ID xyz:type="ID">5e3ae98c7e4b4af9836cd</xyz:ID> <xyz:ID xyz:type="DID">PENDING</xyz:ID> </xyz:AStatus> <xyz:Net>0</xyz:Net> <xyz:AMoment>2019-10-10</xyz:AMoment> </xyz:Report_Entry> </xyz:Report_Data> </env:Body> </env:Envelope> </xyz:Body> </xyz:Envelope>

由于它有多个报告条目,因此格式正确,没有任何问题:

a345ea1b59d c867b9511fa201

CCH2 c867b9511fa201 c867b9511fa201 5005854

 <xyz:AStatus xyz:Descriptor="Pending"> <xyz:ID xyz:type="ID">5e3ae98c7e4b4af9836cd</xyz:ID> <xyz:ID xyz:type="DID">PENDING</xyz:ID> </xyz:AStatus> <xyz:Net>0</xyz:Net> <xyz:AMoment>2019-10-10</xyz:AMoment> </xyz:Report_Entry> <xyz:Report_Entry> <xyz:BusinessAsset xyz:Descriptor="12"> <xyz:ID xyz:type="ID">a345ea1b59d</xyz:ID> </xyz:BusinessAsset> <xyz:CH xyz:Descriptor="UCCH2"> <xyz:ID xyz:type="ID">c867b9511fa201</xyz:ID> <xyz:ID xyz:type="OID" >CCH2</xyz:ID> <xyz:ID xyz:type="CID" >CCH2</xyz:ID> </xyz:CH> <xyz:CH xyz:Descriptor="UCCH3"> <xyz:ID xyz:type="ID">c867b9511fa201</xyz:ID> <xyz:ID xyz:type="OID" >CCH3</xyz:ID> <xyz:ID xyz:type="CID" >CCH3</xyz:ID> </xyz:CH> <xyz:CH xyz:Descriptor="UCCH4"> <xyz:ID xyz:type="ID">c867b9511fa201</xyz:ID> <xyz:ID xyz:type="OID" >CCH4</xyz:ID> <xyz:ID xyz:type="CID" >CCH4</xyz:ID> </xyz:CH> <xyz:AID>5005854</xyz:AID> <xyz:AStatus xyz:Descriptor="Pending"> <xyz:ID xyz:type="ID">5e3ae98c7e4b4af9836cd</xyz:ID> <xyz:ID xyz:type="DID">PENDING</xyz:ID> </xyz:AStatus> <xyz:Net>0</xyz:Net> <xyz:AMoment>2019-10-10</xyz:AMoment> </xyz:Report_Entry> </xyz:Report_Data> </env:Body> </env:Envelope> </xyz:Body> </xyz:Envelope>

如果要将'Report_Entry'显示为JSON数组,无论它有一个还是多个元素,都需要在XSLT文件中完成,并且需要在下面包含Z3501BB093D363810B671059B9CF处理指令。

<xsl:processing-instruction name="xml-multiple">Report_Entry</xsl:processing-instruction>

你可以试试这个:

    <?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">
    <xsl:output method="text" omit-xml-declaration="yes" indent="yes"/>
    <xsl:template match="Report_Data">
        <xsl:text>{</xsl:text>
        <xsl:text>&#x0A;</xsl:text>
        <xsl:text>&#x2003;"</xsl:text><xsl:value-of select="local-name()"/><xsl:text>":</xsl:text>
        <xsl:for-each select="Report_Entry">
            <xsl:text>{</xsl:text><xsl:text>&#x0A;</xsl:text>
            <xsl:text>&#x2003;&#x2003;"</xsl:text><xsl:value-of select="local-name()"/><xsl:text>":</xsl:text>
            <xsl:for-each select="ID">
                <xsl:if test="following-sibling::* and position()=1">[&#x0A;</xsl:if>
                <xsl:if test="not(following-sibling::*) and position()=1"><xsl:text>&#x0A;</xsl:text></xsl:if>
                <xsl:text>&#x2003;&#x2003;&#x2003;{</xsl:text><xsl:text>"</xsl:text><xsl:value-of select="local-name()"/><xsl:text>": </xsl:text><xsl:value-of select="concat('&quot;',.,'&quot;')"/><xsl:text>}</xsl:text><xsl:text>&#x0A;</xsl:text>
                <xsl:if test="preceding-sibling::* and position()=last()">&#x2003;&#x2003;]&#x0A;</xsl:if>
            </xsl:for-each>
            <xsl:text>&#x2003;}</xsl:text><xsl:text>&#x0A;</xsl:text>
        </xsl:for-each>
        <xsl:text>}</xsl:text>
    </xsl:template>
</xsl:stylesheet>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM