2011-08-25 6 views
5

Quando uso XmlReader per analizzare un file XML, ottengo risultati diversi a seconda che il file XML sia formattato correttamente (cioè con una nuova riga) o meno.XmlReader - problema di lettura di file xml senza righe di riepilogo

Questo è il codice che sto utilizzando:

XmlReader reader = new XmlTextReader(xmlfile); 
reader.MoveToContent(); 
while (reader.Read()) 
{ 
    switch (reader.NodeType) 
    { 
     case XmlNodeType.Element: 
      if (reader.Name == "entry") 
      { 
       Console.WriteLine(reader.ReadElementContentAsString()); 
      } 
      break; 
    } 
} 

E il contenuto XML che ho usato è:

<xport><meta><columns>5</columns><legend><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_total_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:memory_free_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_memory_usage_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_free_memory_kib</entry><entry>AVERAGE:host:ed402b4d-71e7-4a8d-be29-ab6e54e955c8:xapi_live_memory_kib</entry></legend></meta></xport> 

Le stampe di codici a solo 3 linee, quando in realtà dovrebbe stampare 5. Suppongo che mi manchi qualcosa, ma non ha senso per me che lo stesso codice produca risultati diversi sullo stesso file XML quando non ho spazi bianchi.

risposta

7

Vedi Why does XmlReader skip every other element if there is no whitespace separator?

si sta chiamando [ReadElementContentAsString], che consumerà l'elemento e posizionare il "cursore" appena prima l'elemento successivo. Stai quindi chiamando di nuovo Leggi, che sposta il cursore su (ad esempio sul nodo di testo all'interno dell'elemento).

ciclo

Modified (quasi esattamente come in altra questione):

while (!reader.EOF) 
{ 
    if (reader.NodeType == XmlNodeType.Element && reader.Name == "entry") 
    { 
     Console.WriteLine(reader.ReadElementContentAsString()); 
    } 
    else 
    { 
     reader.Read(); 
    } 
} 
+0

Grazie. Giuro di aver cercato SO per questo. – rabin

+1

Hai cercato utilizzando la ricerca interna di SO? Perché non è molto buono, Google è molto meglio;) –