2011-11-10 36 views
21

我有一些代碼,返回一個XNode我看起來像這樣:讀取值

<File> 
    <Component>Main</Component> 
    <Path>C:\Main\</Path> 
    <FileName>main.txt</FileName> 
</File> 

我需要有一些C#代碼,就能拉出Path的值例如(C:\ Main)。我知道,如果我使用XML節點,我可以這樣做:

String filePath = xmlNode["Path"].InnerText; 

有人知道XNode的等價物是什麼嗎?任何幫助深表感謝!

回答

42

你有讓它返回XNode而不是XElement?隨着XElement它比用XNode簡單:

string filePath = fileElement.Element("Path").Value; 

這將找到第一Path元素,並且將拋出一個NullReferenceException如果沒有任何。如果你如果沒有很高興拿到null替代任何將是:

string filePath = (string) fileElement.Element("Path"); 

如果你真的堅持XNode的時候,你要麼必須轉換爲XElement或可能XContainer

+0

即時得到例外嘗試投放到的XElement時。你有解決方案嗎?在此先感謝 – ot0

+0

@ ot0:不知道更多的上下文,沒有。我建議你用一個例子來問一個新問題。 –

+0

XElement xelm =(XElement)XNodeObject;返回異常 – ot0

0

您可以使用此:

XElement xtr = XElement.Load("path/to/your/xml/file"); 
String filePath = xtr.Descendants("Path").Single().Value; 
7

您可以將XNode轉換成的XElement來訪問它的屬性,我的例子:

XNode lastNode = myXElement.LastNode; 

//if I want to get the 'ID' attribute 
string id = (lastNode as XElement).Attribute("ID").Value; 
+0

是不是下降不好? – batbaatar

+0

啊,謝謝。不過,我現在看到XElement可以正常工作。 – AndrewRalon

0

如果導入System.Xml.XPath你可以使用XPathSelectElement這樣的XNode對象:

String component = xmlNode.XPathSelectElement("Component"); 
String path = xmlNode.XPathSelectElement("Path"); 
String fileName = xmlNode.XPathSelectElement("FileName"); 
0

鑄造XNode到的XElement作品爲individ ual元素來檢索其值或屬性。但是您將無法使用myXelement.Elements(「XXX」)來獲取嵌套元素。爲此你可以使用xmlNode.Nodes()。

這應該工作:

var nodes = xmlNode.Nodes();//Get all nodes under 'File' 
var fileNameNode = nodes.Where(el => ((XElement)el).Name.LocalName == "FileName") 
.FirstOrDefault(); 
string filePath = ((XElement)fileNameNode).Value;