2

要检索嵌套 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;
4

2 回答 2

3

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

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

当我想要一个属性或元素的值时,我通常会做的另一件事是像上面那样用字符串转换我的 XElements 和 XAttributes。转换为字符串的空值将返回空字符串,从而防止您在调用 .Value 时遇到空引用异常。

于 2012-11-19T23:44:24.550 回答
2

也可以工作:

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

我更喜欢使用 XPath,因为它简洁,但它是您的选择。

于 2012-11-20T00:08:54.163 回答