我有以下 XML 作為字串,需要將其轉換為 JSON:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope>
<SOAP-ENV:Body>
<Results>
<Summary>
<Status xsi:type="xsd:boolean">true</Status>
<etc xsi:type="xsd:string">etc</etc>
</Summary>
</Results>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
我的預期輸出是:
{
"Summary": {
"Status": true,
"etc": "etc"
}
}
我的嘗試
我正在使用以下代碼
var doc = new XmlDocument();
doc.LoadXml(xmlString);
var json = JsonConvert.SerializeXmlNode(doc);
var jObject = JObject.Parse(json);
var final = Convert.ToString(jObject["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["Results"]["Summary"]);
然而,這會產生一個奇怪的 JSON,如下所示:
{
"Status": {
"@xsi:type": "xsd:boolean",
"#text": "true"
},
"etc": {
"@xsi:type": "xsd:string",
"#text": "etc"
},
}
我該怎么辦?
SerializeXmlNode
uj5u.com熱心網友回復:
你可以用XDocument. XDocument 可以洗掉屬性。
public static XDocument RemoveAttributes(string xml)
{
var xDoc = XDocument.Parse(xml);
xDoc.Document?
.Descendants()
.ForEach(x => {
foreach (var attr in x.Attributes().ToList())
{
if (attr.IsNamespaceDeclaration)
continue;
attr.Remove();
}
}
);
return xDoc;
}
var xDoc = RemoveAttributes(xmlString);
var json = JsonConvert.SerializeXNode(xDoc);
var jObject = JObject.Parse(json);
var final = Convert.ToString(jObject["SOAP-ENV:Envelope"]["SOAP-ENV:Body"]["Results"]);
結果是:
{
"Summary": {
"Status": "true",
"etc": "etc"
}
}
uj5u.com熱心網友回復:
對于 XQuery 3.1,這是
declare option output:method "json";
declare option output:indent "yes";
map{"Summary":
map{"status": xs:boolean(//Summary/status),
"etc": string(//Summary/etc)
}
}
使用 XSLT 或 XQuery 進行 XML 到 json 的轉換可以讓您完全控制映射,您不會受制于某些轉換庫的設計者的突發奇想。標準轉換庫很少給您足夠的控制權來完成整個作業,而無需進行一些預處理或后處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/429363.html
上一篇:npm無法安裝依賴項
