XmlReader - Self-closing element does not fire a EndElement event?
Asked Answered
W

1

37

I am using XmlReader in .NET to parse an XML file using a loop:

while (xml.Read()) {
   switch xml.NodeType {
     case XmlNodeType.Element:
      //Do something
     case XmlNodeType.Text:
      //Do something
     case XmlNodeType.EndElement:  
      //Do something
   }
}

I was wondering if it was normal that the following XML code does not produce some EndElement nodes? Please note the missing space before the /> but I don't think that's the problem.

<date month="November" year="2001"/>
<zone name="xml"/>

Is there a different NodeType or property to indicate a self-closing element?

Wedlock answered 27/10, 2008 at 20:52 Comment(0)
G
62

No, you check it by looking at XmlReader.IsEmptyElement.

In the docs for that property:

A corresponding EndElement node is not generated for empty elements.

Gastrovascular answered 27/10, 2008 at 21:3 Comment(3)
How would I tell the difference between <element /> and <element></element> when my current NodeType is StartElement? IsEmptyElement is true for both scenarios.Cuisine
@BrianWarshaw: You'd see whether an EndElement node is present, basically... I don't know any way of doing it immediately when you're on the StartElement.Gastrovascular
Thanks--turns out I may have been wrong about IsEmptyElement being true in those cases. I've been staring at this output for too long :-)Cuisine

© 2022 - 2024 — McMap. All rights reserved.