我有下一个简单的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);


输出为:


  名称= xml,NodeType = XmlDeclaration,IsEmptyElement = False
  
  名称=工作,NodeType =元素,IsEmptyElement = False
  
  名称= pageSetup,NodeType =元素,IsEmptyElement = False
  
  名称= pageSetup,NodeType = EndElement,IsEmptyElement = False
  
  名称=工作,NodeType = EndElement,IsEmptyElement = False
  
  


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

但是,如果我foramt带有换行符的xml(在Notepad ++中为ctrl + alt + shift + b):

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


并运行程序,输出为:


  名称= xml,NodeType = XmlDeclaration,IsEmptyElement = False
  
  名称=,NodeType =空格,IsEmptyElement = False
  
  名称=工作,NodeType =元素,IsEmptyElement = False
  
  名称=,NodeType =空格,IsEmptyElement = False
  
  名称= pageSetup,NodeType =元素,IsEmptyElement = True
  
  名称=,NodeType =空格,IsEmptyElement = False
  
  名称=工作,NodeType = EndElement,IsEmptyElement = False
  
  


如您所见,pageSetup的IsEmptyElement = True

为什么两个xml文件之间不同(在pageSetup的IsEmptyElement值中)?

最佳答案

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

在第一种情况下,您有一个end元素,因此IsEmptyElement返回false(尽管元素内容为空),在第二种情况下,您没有结束标记,这就是为什么您将IsEmptyElement设置为true的原因。

10-04 18:49