为什么 XmlReader.IsEmptyElement return 不同的值?

Why does XmlReader.IsEmptyElement return different values?

我有下一个简单的 xml 文件:

<?xml version="1.0" encoding="UTF-8" ?><work><pageSetup paperSize="9" fitToHeight="0" orientation="landscape"></pageSetup></work>

当我运行下一个代码:

using (XmlReader reader = XmlReader.Create(inFile))
    while (reader.Read())
        Console.WriteLine("Name = {0}, NodeType = {1}, IsEmptyElement ={2}\n", reader.Name, reader.NodeType, reader.IsEmptyElement);

输出为:

Name = xml, NodeType = XmlDeclaration, IsEmptyElement =False

Name = work, NodeType = Element, IsEmptyElement =False

Name = pageSetup, NodeType = Element, IsEmptyElement =False

Name = pageSetup, NodeType = EndElement, IsEmptyElement =False

Name = work, NodeType = EndElement, IsEmptyElement =False


如您所见,pageSetup 的 IsEmptyElement=False(我不知道为什么...请参阅 https://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.isemptyelement.aspx

但是如果我格式化 xml(在 Notepad++ 中为 ctrl+alt+shift+b),它会变成换行符:

<?xml version="1.0" encoding="UTF-8" ?>
<work>
    <pageSetup paperSize="9" fitToHeight="0" orientation="landscape"/>
</work>

和运行程序,输出为:

Name = xml, NodeType = XmlDeclaration, IsEmptyElement =False

Name = , NodeType = Whitespace, IsEmptyElement =False

Name = work, NodeType = Element, IsEmptyElement =False

Name = , NodeType = Whitespace, IsEmptyElement =False

Name = pageSetup, NodeType = Element, IsEmptyElement =True

Name = , NodeType = Whitespace, IsEmptyElement =False

Name = work,NodeType = EndElement, IsEmptyElement =False


如您所见,pageSetup 的 IsEmptyElement=True

为什么两个 xml 文件之间存在差异(在 pageSetup 的 IsEmptyElement 值中)?

根据 MSDNIsEmptyElement 仅报告源文档中的元素是否具有结束元素标记。

在第一种情况下,您有一个结束元素,因此 IsEmptyElement returns false(尽管元素内容为空),而在第二种情况下您没有结束标记这就是为什么您看到 IsEmptyElement 设置为 true.