C#使用XmlReader而不是XmlDocument获取额外的空白值
我有一个我不太了解的情况。读取以下XML时:C#使用XmlReader而不是XmlDocument获取额外的空白值,c#,json,xml,json.net,C#,Json,Xml,Json.net,我有一个我不太了解的情况。读取以下XML时: <?xml version="1.0" encoding="utf-8" ?> <Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Countries> <Country> <CountryCode>CN</CountryCode> <CurrentS
<?xml version="1.0" encoding="utf-8" ?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Countries>
<Country>
<CountryCode>CN</CountryCode>
<CurrentStatus>Active</CurrentStatus>
</Country>
</Countries>
<Countries>
<Country>
<CountryCode>AU</CountryCode>
<CurrentStatus>Cancelled</CurrentStatus>
</Country>
<Country>
<CountryCode>CN</CountryCode>
<CurrentStatus>Cancelled</CurrentStatus>
</Country>
<Country>
<CountryCode>US</CountryCode>
<CurrentStatus>Active</CurrentStatus>
</Country>
</Countries>
<Countries xsi:nil="true" />
</Root>
我得到了如下的json
:
json1:
{xml:{@version:“1.0”,“@encoding:“utf-8”},Root:{@xmlns:xsi:“,”国家“:{“国家”:{“国家代码”:“CN”,“当前状态”:“活动”},{“国家代码”:“AU”,“当前状态”:“取消”},{“国家代码”:“CN”,“当前状态”:“取消”},{“国家代码”:“JP”,“当前状态”:“取消”},{“国家代码”:“SG”,“当前状态”:“已取消”},{“CountryCode”:“US”,“CurrentStatus”:“Active”}]},{“@xsi:nil”:“true”}]}
json2:
{“Root”:{@xmlns:xsi”:“”“#空格”:[“\n”
“,”\n“,“\n”,“\n”],“国家”:[{“#空白”:[“\n”,“\n”
“],“国家”:{“#空白”:[“\n”,“\n”,“\n“],“CountryCode”:“CN”,“CurrentStatus”:“Active”},{“#whitespace”:[“\n
“,”\n“,“\n”,“\n”,“\n”,“\n” “],“国家”:[{”#空白“:[“\n”,“\n”,“\n
“],“CountryCode”:“AU”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[“\n” “,”\n“,“\n
“],“CountryCode”:“CN”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[“\n” “,”\n“,“\n
“],“CountryCode”:“JP”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[”\n “,”\n“,“\n
“],“CountryCode”:“SG”,“CurrentStatus”:“Cancelled”},{“#whitespace”:[”\n “,”\n“,“\n
“],“CountryCode”:“US”,“CurrentStatus”:“Active”}]},{“@xsi:nil”:“true”}]} 为什么
XmlReader
会生成空白,而XmlDocument
不会生成空白?我认为给定XML值,它们不应该出现在那里。解决了这个问题:
settings.IgnoreWhitespace = true;
感谢@HenkHolterman和@finrod。尝试
settings.IgnoreWhitespace=true;
。但基本上你已经有了答案。你真的需要一个阅读器吗,即你的数据>100MB吗?我不知道为什么默认情况下XmlReader会这样做,但我认为你只需要设置为true。@HenkHolterman谢谢。我需要阅读器,因为我的XML需要读取数据时没有根元素,XmlDocument
将抛出错误。因为我的问题是关于空格的,所以我添加了根元素以显示XmlDocument
和XmlDocument
之间的差异。您看过XElement吗?通常更易于使用。好的,让我们听听忽略设置有帮助完全
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = false;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Document;
settings.IgnoreWhitespace = true;
XmlReader reader = XmlReader.Create("XMLFile1.xml", settings);
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element )
{
XmlNode node = doc.ReadNode(reader);
string json2 = JsonConvert.SerializeXmlNode(node);
Console.WriteLine(json2.Trim());
}
}
}
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = false;
XmlReaderSettings settings = new XmlReaderSettings();
settings.ConformanceLevel = ConformanceLevel.Document;
settings.IgnoreWhitespace = true;
XmlReader reader = XmlReader.Create("XMLFile1.xml", settings);
{
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element )
{
XmlNode node = doc.ReadNode(reader);
string json2 = JsonConvert.SerializeXmlNode(node);
Console.WriteLine(json2.Trim());
}
}
}