2010-10-13 133 views
1
<a><b>26a83f12c782</b><c>128</c><d>12</d></a> 



static void ReadXml1() 
    { 
     string b = null; 
     double c = 0; 
     double d = 0; 

     using (XmlTextReader xmlReader = new XmlTextReader("Testxml.xml")) 
     { 
      if (xmlReader != null) 
      { 
       while (xmlReader.Read()) 
       { 
        if (xmlReader.NodeType == XmlNodeType.Element) 
        { 
         switch (xmlReader.Name) 
         { 
          case "b": 
           b = xmlReader.ReadElementContentAsString(); 

           break; 
          case "c": 
           c = double.Parse(xmlReader.ReadElementContentAsString()); 

           break; 
          case "d": 
           d = double.Parse(xmlReader.ReadElementContentAsString()); 

           break; 
         } 
        } 
       } 
     } 
      } 

    } 

第一行在Testxml.xml文件中。案例“c”从未被击中。但如果我在xml文件中的</b>之后添加一个空格,它将起作用。但我无法更改xml文件。那么如何获得c元素的值呢?使用C#的XML文件阅读器

+1

是您的情况下,“B”打?它看起来像循环了第一层XML,而不是第二层,其中''存在 – davisoa 2010-10-13 03:55:13

+1

明白了。需要分别在案例“c”和案例“d”之后添加goto案例“c”并且转到案例“d”而不是中断。 – Learner 2010-10-13 04:05:26

+0

你需要休息;否则,代码将落入下一个案例。我在想,xmlReader.Read()只能看到''的XML级别,而不是子级,其中包含'' – davisoa 2010-10-13 04:15:53

回答

3

ReadElementContentAsString在消耗内容后执行读取以移至下一个节点。在你的代码中,你会做一个额外的读取,跳过下一个元素声明。在你所提供的情况下,你可以逃脱出来while循环干脆,例如:

StringReader sr = new StringReader("<a><b>26a83f12c782</b><c>128</c><d>12</d></a>"); 
string b = null; 
double c = 0; 
double d = 0; 
using (XmlReader xmlReader = XmlReader.Create(sr, new XmlReaderSettings() { IgnoreWhitespace = true })) 
{ 
    xmlReader.MoveToContent(); 
    xmlReader.ReadStartElement("a", ""); 
    b = xmlReader.ReadElementContentAsString("b", ""); 
    c = xmlReader.ReadElementContentAsDouble("c", ""); 
    d = xmlReader.ReadElementContentAsDouble("d", ""); 
} 
  • 列表项