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

时间:2012-12-14 13:13:11

标签: c# xml xml-parsing xmlreader

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

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

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

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

任何人都能解释一下吗?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

您是否设置了以下值?

settings.IgnoreWhitespace = true;

<强> [编辑]

您可能想要更改settings

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