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

20,731

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.

Share:
20,731
Vincent
Author by

Vincent

Updated on July 09, 2022

Comments

  • Vincent
    Vincent almost 2 years

    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?

  • Brian Warshaw
    Brian Warshaw over 7 years
    How would I tell the difference between <element /> and <element></element> when my current NodeType is StartElement? IsEmptyElement is true for both scenarios.
  • Jon Skeet
    Jon Skeet over 7 years
    @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.
  • Brian Warshaw
    Brian Warshaw over 7 years
    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 :-)