使用复杂的 XML 数据将 XML 转换为 JSON
Converting XML to JSON with complex XML data
我有一个 XML 这样的:
<job>
<properties>
<name>jobid</name>
<value>81963</value>
</properties>
<properties>
<name>status</name>
<value>complete</value>
</properties>
<properties>
<name>date</name>
<value>2018-07-30</value>
</properties>
</job>
<job>
<properties>
<name>jobid</name>
<value>81194</value>
</properties>
<properties>
<name>status</name>
<value>complete</value>
</properties>
<properties>
<name>date</name>
<value>2018-07-30</value>
</properties>
</job>
我需要做的是获取每个作业的所有属性。我很难遍历它的节点和子节点,但无法得到它的确切逻辑。我真正需要做的是将这些数据转换成类似的东西:
[{
"jobid": "81963",
"status": "complete",
"date": "2018-07-30"
},
{
"jobid": "81194",
"status": "complete",
"date": "2018-07-30"
}]
我已经试过了:
foreach (XmlNode child in xn.SelectNodes("properties"))
{
arrd.Add(checkNullValue(child["value"]));
}
arrd2.AddRange(arrd);
//For Converting to JSON
try
{
var jobVals = getXmlData("test", "testuser2", "654321", "Sources/soapRequest.xml");
Response.Write(jobVals.Count);
//JSONIZE list(the XML)
string json = JsonConvert.SerializeObject(jobVals);
Response.Write(json);
}
catch (Exception ex)
{
Response.Write(ex);
}
请帮忙。
您提供的 JSON 无效 JSON。你可以在哪里使用
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc);
使用 Linq XML
XDocument xml = //...
var result = xml.Elements("job")
.Select(job => job
.Elements("properties")
.ToDictionary(p => p.Element("name").Value, p => p.Element("value").Value)
);
result
将包含一个字典集合,当序列化时,
string json = JsonConvert.SerializeObject(result);
使用类似 Json.Net 的方法将产生所需的结果。
以上示例不包括任何验证检查,但可以轻松添加。该示例只是为了展示如何将数据转换为所需的模型。
在 XSLT 中非常简单:
<xsl:template match="/">[<xsl:apply-templates/>]</xsl:template>
<xsl:template match="job">{<xsl:apply-templates/>}</xsl:template>
<xsl:template match="properties">"<xsl:value-of select="name"/>":"<xsl:value-of select="value"/>"</xsl:template>
我有一个 XML 这样的:
<job>
<properties>
<name>jobid</name>
<value>81963</value>
</properties>
<properties>
<name>status</name>
<value>complete</value>
</properties>
<properties>
<name>date</name>
<value>2018-07-30</value>
</properties>
</job>
<job>
<properties>
<name>jobid</name>
<value>81194</value>
</properties>
<properties>
<name>status</name>
<value>complete</value>
</properties>
<properties>
<name>date</name>
<value>2018-07-30</value>
</properties>
</job>
我需要做的是获取每个作业的所有属性。我很难遍历它的节点和子节点,但无法得到它的确切逻辑。我真正需要做的是将这些数据转换成类似的东西:
[{
"jobid": "81963",
"status": "complete",
"date": "2018-07-30"
},
{
"jobid": "81194",
"status": "complete",
"date": "2018-07-30"
}]
我已经试过了:
foreach (XmlNode child in xn.SelectNodes("properties"))
{
arrd.Add(checkNullValue(child["value"]));
}
arrd2.AddRange(arrd);
//For Converting to JSON
try
{
var jobVals = getXmlData("test", "testuser2", "654321", "Sources/soapRequest.xml");
Response.Write(jobVals.Count);
//JSONIZE list(the XML)
string json = JsonConvert.SerializeObject(jobVals);
Response.Write(json);
}
catch (Exception ex)
{
Response.Write(ex);
}
请帮忙。
您提供的 JSON 无效 JSON。你可以在哪里使用
XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);
string json = JsonConvert.SerializeXmlNode(doc);
使用 Linq XML
XDocument xml = //...
var result = xml.Elements("job")
.Select(job => job
.Elements("properties")
.ToDictionary(p => p.Element("name").Value, p => p.Element("value").Value)
);
result
将包含一个字典集合,当序列化时,
string json = JsonConvert.SerializeObject(result);
使用类似 Json.Net 的方法将产生所需的结果。
以上示例不包括任何验证检查,但可以轻松添加。该示例只是为了展示如何将数据转换为所需的模型。
在 XSLT 中非常简单:
<xsl:template match="/">[<xsl:apply-templates/>]</xsl:template>
<xsl:template match="job">{<xsl:apply-templates/>}</xsl:template>
<xsl:template match="properties">"<xsl:value-of select="name"/>":"<xsl:value-of select="value"/>"</xsl:template>