<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元素的值。
答案 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", "");
}