2008-10-27 15 views
32

Używam XmlReader .NET do analizowania pliku XML za pomocą pętli:XmlReader - Element samozamykający się nie uruchamia zdarzenia EndElement?

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

Zastanawiałem się, czy to normalne, że następujący kod XML nie wywołuje pewne węzły endElement? Zwróć uwagę na brakujące miejsce przed />, ale nie sądzę, że to jest problem.

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

Czy istnieje inny NodeType lub właściwość wskazująca element samozamykający?

Odpowiedz

53

Nie, sprawdzasz to, patrząc na XmlReader.IsEmptyElement.

W Dokumentach tej właściwości:

Odpowiedni węzeł endElement nie generowane pustych elementów.

+1

Jak bym odróżnić '' i '' kiedy mój obecny 'NodeType' jest' StartElement'? "IsEmptyElement" ma wartość "prawda" dla obu scenariuszy. –

+0

@BrianWarshaw: Zobaczysz, czy węzeł 'EndElement' jest obecny, w zasadzie ... Nie znam żadnego sposobu zrobienia tego natychmiast, gdy jesteś na" StartElement ". –

+0

Dzięki - okazało się, że nie miałem racji co do tego, że 'IsEmptyElement' jest prawdziwe w tych przypadkach. Zbyt długo wpatrywałem się w to wyjście :-) –

Powiązane problemy