2011-08-25 17 views
5

Bir XML dosyasını ayrıştırmak için XmlReader kullandığımda, XML dosyasının düzgün şekilde biçimlendirilip biçimlendirilmediğine (yani, yeni satırlarla mı) bağlı olarak farklı sonuçlar elde ederim.XmlReader - yeni satırlar içermeyen xml dosyasını okuma sorunu

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

Ve kullanıyorum XML içerik edilir:

Bu kullanıyorum kodudur

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

kod yazdırır yalnızca 3 satır, gerçekten should yazdırılıyor 5. Sanırım bir şeyleri özlüyorum, ama aynı kodun, beyaz boşluklarım olmadığında aynı XML dosyasında farklı sonuçlar üreteceğini anlamıyorum.

cevap

7

elemanı tüketmek ve hemen yanında elemandan önce "imleç" yerleştirecektir Bunu [ReadElementContentAsString] aradığınız Why does XmlReader skip every other element if there is no whitespace separator?

, bakınız. Ardından, imleci (örn., Öğenin içindeki metin düğümüne) hareket ettiren Okuma'yı tekrar çağırıyorsunuz. (Neredeyse tam diğer Söz konusu gibi)

Modifiye döngü:

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

teşekkürler. Yemin ederim bunun için SO aramıştım. – rabin

+1

SO'nun dahili araması ile arama yaptınız mı? Çok iyi olmadığı için Google çok daha iyi;) –