XPath和XPathSelectElement

我有以下xml

       

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

我的代码到目前为止:

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

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

谢谢你的帮助。

 var dbName = doc.XPathSelectElement("root/databases/db2").Attribute("name"); 

XPathSelectElement方法只能用于选择元素,而不能用于选择属性。

对于属性,您需要使用更通用的XPathEvaluate方法 :

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

要获取db2元素的name属性的值( Name2 ),请尝试以下操作:

  var query = "root/databases/db2"; var doc = XDocument.Load("myconfig.xml"); var dbElement = doc.XPathSelectElement(query); Console.WriteLine(dbElement.Attribute("name").Value); 

如果您不知道元素的名称( db2 ),但确实知道它具有server属性,请尝试以下操作:

  var query = "root/databases/*[@server]"; var doc = XDocument.Load("myconfig.xml"); var dbElement = doc.XPathSelectElement(query); Console.WriteLine(dbElement.Attribute("name").Value); 

如果你想做与前一个例子相同的事情,但是有多个具有server属性的元素,并且你想在它们之间进行选择,请尝试这样做:

  var query = "root/databases/*[@server='myserver']"; var doc = XDocument.Load("myconfig.xml"); var dbElement = doc.XPathSelectElement(query); Console.WriteLine(dbElement.Attribute("name").Value);