如何忽略每个元素的前缀“ zs:”将xml转换为json。
<?xml version="1.0" encoding="UTF-8" ?>
<zs:searchRetrieveResponse xmlns:zs="http://www.loc.gov/zing/srw/">
<zs:version>1.1</zs:version>
<zs:numberOfRecords>0</zs:numberOfRecords>
<zs:echoedSearchRetrieveRequest>
<zs:version>1.1</zs:version>
<zs:query>dc.identifier="9780393051247"</zs:query>
<zs:startRecord>1</zs:startRecord>
<zs:maximumRecords>10</zs:maximumRecords>
<zs:recordPacking>xml</zs:recordPacking>
<zs:recordSchema>marcxml</zs:recordSchema>
</zs:echoedSearchRetrieveRequest>
答案 0 :(得分:1)
您不能只忽略命名空间-它是不可或缺的元素。请使用:
string xmlWithoutNamespace = yourXmlString.Replace("zs:", "");
在您的xml字符串上,然后将其转换为json。
答案 1 :(得分:1)
Json.Net有一个用于此的库。我在LinqPad.Net中使用了您的xml。
此代码:
var xml = new StringBuilder();
xml.AppendLine("<?xml version = \"1.0\" encoding = \"UTF-8\"?>");
xml.AppendLine("<zs:searchRetrieveResponse xmlns:zs = \"http://www.loc.gov/zing/srw/\">");
xml.AppendLine("<zs:version>1.1</zs:version >");
xml.AppendLine("<zs:numberOfRecords>0</zs:numberOfRecords>");
xml.AppendLine("<zs:echoedSearchRetrieveRequest>");
xml.AppendLine("<zs:version>1.1</zs:version>");
xml.AppendLine("<zs:query>dc.identifier=\"9780393051247\"</zs:query>");
xml.AppendLine("<zs:startRecord>1</zs:startRecord>");
xml.AppendLine("<zs:maximumRecords>10</zs:maximumRecords>");
xml.AppendLine("<zs:recordPacking>xml</zs:recordPacking>");
xml.AppendLine("<zs:recordSchema>marcxml</zs:recordSchema>");
xml.AppendLine("</zs:echoedSearchRetrieveRequest>");
xml.AppendLine("</zs:searchRetrieveResponse>");
xml.Replace("zs:", string.Empty);
xml.Replace(":zs", string.Empty);
var xmlDoc = new XmlDocument();
xmlDoc.LoadXml(xml.ToString());
var json = JsonConvert.SerializeXmlNode(xmlDoc);
json.Dump();
产生此结果:
{
"?xml":{
"@version":"1.0",
"@encoding":"UTF-8"
},
"searchRetrieveResponse":{
"@xmlns":"http://www.loc.gov/zing/srw/",
"version":"1.1",
"numberOfRecords":"0",
"echoedSearchRetrieveRequest":{
"version":"1.1",
"query":"dc.identifier=\"9780393051247\"",
"startRecord":"1",
"maximumRecords":"10",
"recordPacking":"xml",
"recordSchema":"marcxml"
}
}
}
答案 2 :(得分:1)
您可以使用自定义JsonTextWriter。
public class CustomJsonWriter : JsonTextWriter
{
public CustomJsonWriter(TextWriter writer): base(writer){}
public override void WritePropertyName(string name)
{
base.WritePropertyName(name.Replace("zs:",string.Empty));
}
}
然后
var xDocument = XDocument.Parse(xml);
var builder = new StringBuilder();
using(var writer = new StringWriter(builder))
{
var serializer = JsonSerializer.Create();
serializer.Serialize(new CustomJsonWriter(writer), xDocument);
}
输出
{
"?xml": {
"@version": "1.0",
"@encoding": "UTF-8"
},
"searchRetrieveResponse": {
"@xmlns:zs": "http://www.loc.gov/zing/srw/",
"version": "1.1",
"numberOfRecords": "0",
"echoedSearchRetrieveRequest": {
"version": "1.1",
"query": "dc.identifier='9780393051247'",
"startRecord": "1",
"maximumRecords": "10",
"recordPacking": "xml",
"recordSchema": "marcxml"
}
}
}