c# - XPath 和 XPathSelectElement

标签 c# .net xml xpath linq-to-xml

我有以下 xml

<root>
   <databases>
      <db1 name="Name1" />
      <db2 name="Name2" server="myserver" />
      <db3 name="Name3" />
   </databases>
<root>

我已经尝试了所有可能的 XPath 查询组合来读取 db2 (="Name2") 的名称,但从未获得预期的结果。

到目前为止我的代码:

var query = "root/databases/db2.. "; // here I've tried everything 
var doc = XDocument.Load("myconfig.xml");
var dbName =  doc.XPathSelectElement(query);

获取“Name2”(属性值)的正确查询是什么?

感谢您的帮助。

最佳答案

XPathSelectElement method只能用于选择元素,不能用于选择属性。

对于属性,你需要使用更通用的XPathEvaluate method :

var result = ((IEnumerable<object>)doc.XPathEvaluate("root/databases/db2/@name"))
                                      .OfType<XAttribute>()
                                      .Single()
                                      .Value;

// result == "Name2"

关于c# - XPath 和 XPathSelectElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6289784/

相关文章:

c# - WPF 从子 ItemsControl 数据模板内部绑定(bind)到父 ItemsControl

C#:如何找到运行时类型的默认值?

c# - 根据另一个集合的值从集合中移除 - Lambda/Linq

c# - 将 DateTime.Now 转换为秒

c# - 具有 T 类型如何在程序集中找到所有扩展 Base<T> 的类?

java - 用java解析高级XML

xml - 强制 Spring Web 服务将 xsd 命名空间添加到响应中

android - 如何使用 EditText 下面的 xml(形状)将线条设置为背景?

c# - 应用程序不会在其他计算机上运行/打开

c# - 使用非默认构造函数创建运行时确定类型的对象