当缩进xml时,XMLREADER会给出不同的结果

我在两个不同的文件中有相同的XML。 在一个文件中,XML缩进 – 另一个不缩进。 XML如下:

      

使用以下代码时,我得到两个文件的不同结果:

 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; } 

使用缩进文件,我得到以下值:

 prevLocalname = ""; newLocalname = "element1"; 

如果文件没有缩进,我会得到以下值:

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

有谁能解释一下?

当然 – 以缩进forms,你有一个文本节点,你得到的本地名称(为空)。 然后,您将移动到下一个节点,即element1元素。

在非缩进forms中,没有文本节点,因此您将获得element1的本地名称,当您移动到下一个元素时,它会读取element2

如果你告诉XmlReader忽略不相关的空格,那么差异就会消失 – 但你可能会丢失你想要将空白视为相关的情况。

你有没有设定下面的值?

 settings.IgnoreWhitespace = true; 

[编辑]

您可能想要更改settings

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