Почему работает XmlReader.Isemptyelement возвращает различные значения?


У меня есть следующий простой 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 = работа, NodeType = элемент, IsEmptyElement =False

Name = pageSetup, NodeType = Element, IsEmptyElement =False

Name = pageSetup, NodeType = EndElement, IsEmptyElement =False

Name = работа, NodeType = конечный элемент, IsEmptyElement =False


Как вы можете видеть, IsEmptyElement pageSetup=False (я не знаю, почему... видишь https://msdn.microsoft.com/en-us/library/system.xml.xmltextreader.isemptyelement.aspx)

Но если я foramt xml (ctrl+alt+shift+b в Notepad++), который становится с разрывами строк:

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

И запускаем программу, выводим:

Name = xml, NodeType = XmlDeclaration, IsEmptyElement =False

Name =, NodeType = Пробел, IsEmptyElement =False

Name = работа, NodeType = элемент, IsEmptyElement =False

Name =, NodeType = Пробел, IsEmptyElement =False

Name = pageSetup, NodeType = Element, IsEmptyElement =True

Name =, NodeType = Пробел, IsEmptyElement =False

Name = work, NodeType = EndElement, IsEmptyElement =False


Как вы можете видеть, IsEmptyElement pageSetup=True

Почему это существует ли разница (в значении IsEmptyElement в pageSetup) между двумя xml-файлами?

1 2

1 ответ:

Согласно MSDN, IsEmptyElement просто сообщает, имел ли элемент в исходном документе тег end element.

В первом случае у вас есть конечный элемент, поэтому IsEmptyElement возвращает false (хотя содержимое элемента пусто), где, как и во втором случае, у вас нет конечного тега, поэтому вы видите, что IsEmptyElement установлено в true.