2012-11-19 76 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为它的简洁,但它是你的选择。

相关问题