2011-08-27 119 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