2011-08-25 12 views
5

Cuando uso XmlReader para analizar un archivo XML, obtengo resultados diferentes dependiendo de si el archivo XML está formateado correctamente (es decir, con líneas nuevas) o no.XmlReader - problema al leer el archivo xml sin líneas nuevas

Este es el código que estoy usando:

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; 
    } 
} 

Y el contenido XML He estado usando es:

<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> 

La impresora de código fuera sólo 3 líneas, cuando en realidad debería estar imprimiendo 5. Supongo que me falta algo, pero no tiene sentido para mí que el mismo código produzca resultados diferentes en el mismo archivo XML cuando no tengo espacios en blanco.

Respuesta

7

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

Estás llamando [ReadElementContentAsString], que consumirá el elemento y coloque el "cursor" justo antes del siguiente elemento. Entonces está llamando nuevamente a Read, que mueve el cursor (por ejemplo, al nodo de texto dentro del elemento).

bucle

Modificado (casi exactamente igual que en la otra pregunta):

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

Gracias. Juro que había buscado SO para esto. – rabin

+1

¿Ha buscado utilizando la búsqueda interna de SO? Debido a que no es muy bueno, Google es mucho mejor;) –

Cuestiones relacionadas