Я использую XmlReader в .NET для анализа XML-файла с помощью цикла:
while (xml.Read()) {
switch xml.NodeType {
case XmlNodeType.Element:
//Do something
case XmlNodeType.Text:
//Do something
case XmlNodeType.EndElement:
//Do something
}
}
Мне было интересно, нормально ли, что следующий XML-код не создает некоторые узлы EndElement? Обратите внимание на отсутствие пробела перед />, но я не думаю, что это проблема.
<date month = "November" year = "2001"/>
<zone name = "xml"/>
Есть ли другой NodeType или свойство для обозначения самозакрывающегося элемента?





Нет, вы можете проверить это, посмотрев на XmlReader.IsEmptyElement.
В документации для этого свойства:
A corresponding EndElement node is not generated for empty elements.
@BrianWarshaw: Вы бы посмотрели, присутствует ли узел EndElement, в основном ... Я не знаю, как сделать это немедленно, когда вы находитесь на StartElement.
Спасибо - оказалось, что я мог ошибаться в том, что IsEmptyElement верен в тех случаях. Я слишком долго смотрел на этот вывод :-)
Как я могу отличить
<element />от<element></element>, если мой текущийNodeType- этоStartElement?IsEmptyElement- этоtrueдля обоих сценариев.