如何创建xmlNode,当转换为JSON时,它将始终解析为数组
我有一个简单但棘手的要求。 我的代码派生了一些xml格式的源代码,可以如下所示 XML1如何创建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
<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"}]}}}