2011-08-25 38 views
5

当我使用XmlReader来解析XML文件时,根据XML文件格式是否正确(即换行符),我得到了不同的结果。XmlReader - 读取没有换行符的xml文件时出现问题

这是我使用的代码:

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

而且我一直在使用XML内容:

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

的代码打印出只有3条线路,当它真正应该打印5.我想我错过了一些东西,但是当我没有空白时,相同的代码会在同一个XML文件上产生不同的结果对我来说没有任何意义。

回答

7

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

你调用[ReadElementContentAsString],这将消耗元素,并放置了“光标”只是下一个节点前。然后,您再次调用Read来移动光标(例如移动到元素内的文本节点上)。

修饰的环(几乎完全一样的其他问题):

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

感谢。我发誓我已经为此搜查了。 – rabin

+1

您是否使用SO的内部搜索进行搜索?因为它不是很好,谷歌好多了;) –