2011-08-27 126 views
2

数据:如何从XML读取值?

<sys> 
    <id>SCPUCLK</id> 
    <label>CPU Clock</label> 
    <value>2930</value> 
</sys> 
<sys> 
    <id>CPUTEMP</id> 
    <label>CPU Temp</label> 
    <value>39</value> 
</sys> 

这是我用来读取数据的代码:

XmlDocument document = new XmlDocument(); 
document.LoadXml(data); 
XmlElement node = document.SelectSingleNode("/sys/value") as XmlElement; 
Console.WriteLine("node = " + node); 

问题:Console.WriteLine("node = " + node);没有给我任何的输出除了node:但没有实际价值像上面的样本中的2930一样。

感谢

回答

2

作为替代使用XmlDocument的,你也可以使用LINQ到XML(这是我的偏好):

using System.Xml.Linq; 

XDocument xDoc = new XDocument(); 
// Parse loads the XDocument with XML from a string 
xDoc = XDocument.Parse(data); 

string node = (from x in xDoc.Root.Elements("value") 
       select x.Value).SingleOrDefault(); 

Console.WriteLine("node = " + node); 

使用XmlDocument没什么问题,特别是对于你正在做的事情,但是当你有机会时,你可能想检查一下LINQ to XML,因为我发现它比XmlDocument更容易处理。

如果你想获得所有的“价值”的元素,只需删除从查询中SingleOrDefault(),然后你就可以遍历结果,这样的:

var nodes = from x in xDoc.Root.Elements("value") 
      select x.Value; 

foreach (var node in nodes) 
{ 
    Console.WriteLine("node = " + node); 
} 

这里是值得一试的网站: LINQ to XML - 5 Minute Overview

+0

你简直太棒了!谢谢,我终于可以继续我的Arduino项目。 – Csharpz

+0

不客气。 – Tim

+0

嘿,我首先展示的数据只有其中的一个元素,它们是它们的倍数,我编辑了第一篇文章以显示我的意思。 – Csharpz

4

使用node.value即XmlElement.value