2012-11-19 108 views
2

要retieve嵌套的XElement在我的代碼,我有以下的值:從單個嵌套的XElement中檢索值的正確方法是什麼?

XElement xml = new XElement("UserDefinedSettings", new XElement("RootFolder", new XElement("FolderName", "User Input Goes Here"))); 

xml.Save("UserDefinedSettings.xml"); 

,給了我這個保存到硬盤驅動器:

<?xml version="1.0" encoding="utf-8"?> 
<UserDefinedSettings> 
    <RootFolder> 
    <FolderName>User Input Goes Here</FolderName> 
    </RootFolder> 
</UserDefinedSettings> 

後來,要檢索的名稱文件夾的用戶選擇我使用:

XDocument xdoc = XDocument.Load("UserDefinedSettings.xml"); 

var myVar = xdoc.Descendants("FolderName").Single(); 

textBox1.Text = myVar.Value; 

我是新來的LINQ XML,我想知道如果我做了什麼是去了解它的正確方法?

最初,我一直在使用下面的代碼行來獲取文件夾的名稱,但我知道必須有更好的方法,並且在搜索完這些代碼之後,我將使用上面的代碼。

string s =xdoc.Element("UserDefinedSettings").Element("RootFolder").Element("FolderName").Value; 
+0

這就是我這樣做的方式,在一天結束時,它真的歸結爲個人喜好。 – JuStDaN

回答

3

只要你確定那些元素存在,你應該沒問題(更新的方式)。如果它們中的任何一個不存在,它就會冒着拋出空引用異常的風險。我通常使用Elements()而不是Element()來查詢。 Elements()返回一個IEnumerable,你可以使用更多的Elements()查詢(或其他)安全地鏈接在一起。例如,你可能會考慮:

var folder = (string)xdoc.Elements("UserDefinedSettings").Elements("RootFolder").Elements("FolderName").FirstOrDefault(); 

另一件事我通常做的時候我想從屬性或元素的值被投我XElements和XAttributes一個字符串如我上面做了。作爲字符串強制轉換的空值將返回空字符串,從而防止您使用.Value調用獲得的空引用異常。

2

也將工作:

xdoc.XPathSelectElement("/UserDefinedSettings/RootFolder/FolderName").Value

我更喜歡使用XPath爲它的簡潔,但它是你的選擇。

相關問題