XMLReader可以给出不同的结果,当XML缩进 [英] XMLREADER gives different result when xml is indented

查看:272
本文介绍了XMLReader可以给出不同的结果,当XML缩进的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在两个不同的文件相同的XML。
在一个文件中的XML缩进 - 其他没有。
中的XML如下所示:

I have the same XML in two different files. In one file the XML is indented - the other not. The XML is as follows:

<?xml version="1.0" encoding="utf-8" ?>
<test>
  <element1></element1>
  <element2></element2>
  <element3></element3>
</test>

在使用下面的代码我得到不同的结果有两个文件:

When using the following code I get different result with the two files:

XmlReaderSettings settings = new XmlReaderSettings
{
   IgnoreComments = true,
   IgnoreWhitespace = false,
   IgnoreProcessingInstructions = true
};

using (XmlReader reader = XmlReader.Create(invoiceStream, settings))
{
  reader.MoveToContent();
  reader.Read();
  var prevLocalname = reader.LocalName;
  var element = XNode.ReadFrom(reader) as XElement;
  var newLocalname = reader.LocalName;
}

通过缩进文件我得到以下值:

With the indented file I get the following values:

prevLocalname = "";
newLocalname = "element1";

通过该文件没有缩进我得到以下值:

With the file not indented I get the following values:

prevLocalname = "element1";
newLocalname = "element2";



有人能解释一下吗?

Can anyone explain this?

推荐答案

当然 - 在缩进形式,你有哪些你得到的本地名称的文本节点(如空)。你然后移动到下一个节点,也就是中element1 元素。

Sure - in the indented form, you've got a text node which you're getting the local name of (as empty). You're then moving to the next node, which is the element1 element.

在非缩进格式,没有文本节点,所以你得到中element1 的本地名称下手,当你移动到它的读取下一个元素在element2 代替。

In the non-indented form, there's no text node, so you're getting the local name of element1 to start with, and when you move to the next element it's reading element2 instead.

如果你告诉的XmlReader 来忽略不相关的空白,将差额走开 - 但你可能会失去,你的希望的空白需要考虑相关案例

If you tell the XmlReader to ignore irrelevant whitespace, the difference will go away - but you may lose cases where you want the whitespace to be considered relevant.

这篇关于XMLReader可以给出不同的结果,当XML缩进的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆