2011-08-25 31 views
5

Khi tôi sử dụng XmlReader để phân tích cú pháp tệp XML, tôi nhận được các kết quả khác nhau tùy thuộc vào tệp XML được định dạng đúng (tức là với dòng mới) hay không.XmlReader - vấn đề đọc tệp xml không có dòng mới

Đây là mã Tôi đang sử dụng:

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

Và nội dung XML Tôi đã sử dụng là:

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

Mã in ra chỉ có 3 dòng, khi nó thực sự cần 5. Tôi đoán tôi đang thiếu một cái gì đó, nhưng nó không có ý nghĩa với tôi rằng cùng một mã sẽ tạo ra kết quả khác nhau trên cùng một tệp XML khi tôi không có khoảng trắng.

Trả lời

7

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

Bạn đang gọi điện thoại [ReadElementContentAsString], mà sẽ tiêu thụ nguyên tố này và để các "con trỏ" ngay trước phần tử tiếp theo. Sau đó, bạn sẽ gọi lại Đọc, thao tác này sẽ di chuyển con trỏ trên (ví dụ: đến nút văn bản trong phần tử).

loop

Modified (gần như chính xác như trong câu hỏi khác):

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

Cảm ơn. Tôi thề tôi đã tìm kiếm SO cho việc này. – rabin

+1

Bạn có tìm kiếm bằng cách sử dụng tìm kiếm nội bộ của SO không? Bởi vì nó không phải là rất tốt, Google là tốt hơn nhiều;) –

Các vấn đề liên quan