从单个嵌套的XElement中检索值的正确方法是什么?

时间:2012-11-19 23:38:29

标签: c# winforms linq-to-xml 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的新手,我想知道我所做的是否是正确的方法呢?

最初我一直使用以下代码行来获取文件夹的名称,但我知道必须有一个更好的方法,在搜索SO之后我会使用上面的代码。

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

2 个答案:

答案 0 :(得分:3)

只要您确定存在这些元素,您所拥有的就应该没事(更新的方式)。它存在抛出空引用异常的风险,但是如果它们中的任何一个不存在。我通常使用Elements()而不是Element()进行查询。 Elements()返回一个IEnumerable,你可以安全地链接到更多的Elements()查询(或其他)。例如,您可以考虑:

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

当我想要一个属性或元素的值时,我通常会做的另一件事是使用我上面所做的字符串来构建我的XElements和XAttributes。作为字符串强制转换的null值将返回一个空字符串,从而防止使用.Value调用获得的空引用异常。

答案 1 :(得分:2)

也可以工作:

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

我更喜欢使用XPath,因为它是你的选择。