为什么 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 值中)?
根据 MSDN
,IsEmptyElement
仅报告源文档中的元素是否具有结束元素标记。
在第一种情况下,您有一个结束元素,因此 IsEmptyElement
returns false
(尽管元素内容为空),而在第二种情况下您没有结束标记这就是为什么您看到 IsEmptyElement
设置为 true
.
我有下一个简单的 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 值中)?
根据 MSDN
,IsEmptyElement
仅报告源文档中的元素是否具有结束元素标记。
在第一种情况下,您有一个结束元素,因此 IsEmptyElement
returns false
(尽管元素内容为空),而在第二种情况下您没有结束标记这就是为什么您看到 IsEmptyElement
设置为 true
.