Почему работает 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 ответ:
Согласно
MSDN
,IsEmptyElement
просто сообщает, имел ли элемент в исходном документе тег end element.В первом случае у вас есть конечный элемент, поэтому
IsEmptyElement
возвращаетfalse
(хотя содержимое элемента пусто), где, как и во втором случае, у вас нет конечного тега, поэтому вы видите, чтоIsEmptyElement
установлено вtrue
.