Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何创建xmlNode,当转换为JSON时,它将始终解析为数组_Json_Xml_Xslt_Xsd_Jsonschema - Fatal编程技术网

如何创建xmlNode,当转换为JSON时,它将始终解析为数组

如何创建xmlNode,当转换为JSON时,它将始终解析为数组,json,xml,xslt,xsd,jsonschema,Json,Xml,Xslt,Xsd,Jsonschema,我有一个简单但棘手的要求。 我的代码派生了一些xml格式的源代码,可以如下所示 XML1 <data> <MyDataCollection> <mydata> <m1>dsds</m1> </mydata> <mydata> <m1>dsds</m1> </myda

我有一个简单但棘手的要求。 我的代码派生了一些xml格式的源代码,可以如下所示 XML1

<data>
    <MyDataCollection>
        <mydata>
            <m1>dsds</m1>
        </mydata>
        <mydata>
            <m1>dsds</m1>
        </mydata>
    </MyDataCollection>
</data>
{
  "data": {
    "MyDataCollection": {
      "mydata": [
        { "m1": "dsds" },
        { "m1": "dsds" }
      ]
    }
  }
}
以及XML2的以下输出 JSON2

<data>
    <MyDataCollection>
        <mydata>
            <m1>dsds</m1>
        </mydata>
    </MyDataCollection>
</data>
{
  "data": {
    "MyDataCollection": {
      "mydata": { "m1": "dsds" }
    }
  }
}
当我尝试用相同的JSON模式验证这两个JSON时,问题就出现了

这两个JSON的JSON模式都不同,并且抛出
“需要数组但得到对象”

"Expected Object but got Array"
这取决于它是使用带数组的JSON(第一个JSON)还是带对象的JSON(第二个JSON)

因此,我希望在转换为JSON时总是将
MyDataCollection
解析为数组,而不管它是否有一个或多个子元素

通过在
中添加一个虚拟的
标记,有一种解决方法,但这在我的需求中是不可行的


是否有我可以在XML标记中指定的属性,在解析时总是将其解释为数组?

如果使用XSLT 3.0将XML转换为JSON,可以使用以下样式表:

<xsl:stylesheet version="3.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/2005/xpath-functions">
<xsl:output method="text" encoding="UTF-8"/>

<xsl:template match="/data">
    <!-- CONVERT INPUT TO XML FOR JSON -->
    <xsl:variable name="xml">
        <map>
            <map key="data">
                 <map key="MyDataCollection">
                    <array key="mydata">
                        <xsl:for-each select="MyDataCollection/mydata">
                            <map>
                                <string key="m1">
                                    <xsl:value-of select="m1"/>
                                </string>
                            </map>
                        </xsl:for-each>
                    </array>
                </map>
            </map>
        </map>
    </xsl:variable>
    <!-- OUTPUT -->
    <xsl:value-of select="xml-to-json($xml)"/>
</xsl:template>

</xsl:stylesheet>
从您的XML1示例和:

{"data":{"MyDataCollection":{"mydata":[{"m1":"dsds"}]}}}
XML2


演示1:

演示2:

您还没有说明将使用哪些工具进行XML到JSON的转换。它们都不同,没有一个能很好地解决这个问题,因为XML和JSON数据模型之间存在基本的不匹配。
{"data":{"MyDataCollection":{"mydata":[{"m1":"dsds"}]}}}