当缩进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 };