1

我在两个不同的文件中有相同的 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";

谁能解释一下?

4

2 回答 2

3

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

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

如果您告诉XmlReader忽略不相关的空白,则差异将消失 - 但您可能会丢失您希望空白被视为相关的情况。

于 2012-12-14T13:18:13.867 回答
0

您是否设置了以下值?

settings.IgnoreWhitespace = true;

[编辑]

可能您想更改settings

XmlReaderSettings settings = new XmlReaderSettings
{
   IgnoreComments = true,
   //IgnoreWhitespace = false,
   IgnoreWhitespace = true,
   IgnoreProcessingInstructions = true
};
于 2012-12-14T13:18:08.797 回答