2008-10-27 11 views
32

estoy utilizando XmlReader en .NET para analizar un archivo XML mediante un bucle:XmlReader - ¿Elemento de cierre automático no desencadena un evento EndElement?

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

Me preguntaba si era normal que el siguiente código XML no produce algunos nodos endElement? Tenga en cuenta el espacio faltante antes del />, pero no creo que ese sea el problema.

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

¿Hay un NodeType o propiedad diferente para indicar un elemento de cierre automático?

Respuesta

53

No, usted lo comprueba mirando XmlReader.IsEmptyElement.

En la documentación para que la propiedad:

Un nodo EndElement correspondiente no es generado para los elementos vacíos.

+1

¿Cómo puedo saber la diferencia entre ' 'y' ' cuando mi actual' 'NodeType' es StartElement'? 'IsEmptyElement' es' verdadero' para ambos escenarios. –

+0

@BrianWarshaw: Verás si un nodo 'EndElement' está presente, básicamente ... No sé cómo hacerlo inmediatamente cuando estás en' StartElement'. –

+0

Gracias - resulta que me he equivocado al decir que 'IsEmptyElement' es verdadero en esos casos. He estado mirando esta salida por mucho tiempo :-) –

Cuestiones relacionadas