2012-12-14 22 views
1

我在两个不同的文件中有相同的XML。 在一个文件中,XML是缩进的 - 其他不是。 的XML如下:当xml缩进时,XMLREADER会给出不同的结果

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

任何人都可以解释这一点吗?

+0

让我们显示您的设置declkaration 那里你可以玩IgnoreWhitespace缩进和其他属性 –

回答

3

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

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

如果你告诉XmlReader忽略不相关的空白,差异就会消失 - 但你可能会失去,你要考虑空白相关案例。

+0

我刚刚更新了代码示例与阅读器设置。 因此,如果我将IgnoreWhitespace更改为true,我不应该看到任何区别? 是否正确? –

+0

@JakobBrynitz:我希望*是这种情况 - 但大概很容易让你尝试它... –

+0

作为一个旁注 - 为什么我要在XML文档中使用空格是重要的? –

0

您是否设置了以下值?

settings.IgnoreWhitespace = true; 

[编辑]

也许你想改变settings

XmlReaderSettings settings = new XmlReaderSettings 
{ 
    IgnoreComments = true, 
    //IgnoreWhitespace = false, 
    IgnoreWhitespace = true, 
    IgnoreProcessingInstructions = true 
}; 
相关问题