使用C#的XML文件阅读器

时间:2010-10-13 03:39:35

标签: c# xml

<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元素的值。

1 个答案:

答案 0 :(得分: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", "");
}
  • 列表项