gsh*_*arp 16 .net c# xml xpath linq-to-xml
我有以下xml
<root>
<databases>
<db1 name="Name1" />
<db2 name="Name2" server="myserver" />
<db3 name="Name3" />
</databases>
<root>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有内容来读取db2(="Name2")的名称以及XPath查询的所有可能组合,但从未获得预期的结果.
我的代码到目前为止:
var query = "root/databases/db2.. "; // here I've tried everything
var doc = XDocument.Load("myconfig.xml");
var dbName = doc.XPathSelectElement(query);
Run Code Online (Sandbox Code Playgroud)
获取"Name2"(属性值)的正确查询是什么?
谢谢你的帮助.
dtb*_*dtb 35
该XPathSelectElement方法只能用于选择元素,而不是属性.
对于属性,您需要使用更通用的XPathEvaluate方法:
var result = ((IEnumerable<object>)doc.XPathEvaluate("root/databases/db2/@name"))
.OfType<XAttribute>()
.Single()
.Value;
// result == "Name2"
Run Code Online (Sandbox Code Playgroud)
Ale*_*Aza 19
var dbName = doc.XPathSelectElement("root/databases/db2").Attribute("name");
Run Code Online (Sandbox Code Playgroud)
Mer*_*ham 13
要获取元素Name2的name属性value()db2,请尝试以下方法:
var query = "root/databases/db2";
var doc = XDocument.Load("myconfig.xml");
var dbElement = doc.XPathSelectElement(query);
Console.WriteLine(dbElement.Attribute("name").Value);
Run Code Online (Sandbox Code Playgroud)
如果您不知道element(db2)的名称,但确实知道它有server属性,请尝试以下方法:
var query = "root/databases/*[@server]";
var doc = XDocument.Load("myconfig.xml");
var dbElement = doc.XPathSelectElement(query);
Console.WriteLine(dbElement.Attribute("name").Value);
Run Code Online (Sandbox Code Playgroud)
如果你想做与前一个例子相同的事情,但是有多个带有server属性的元素,并且你想在这些元素之间进行选择,请尝试这样做:
var query = "root/databases/*[@server='myserver']";
var doc = XDocument.Load("myconfig.xml");
var dbElement = doc.XPathSelectElement(query);
Console.WriteLine(dbElement.Attribute("name").Value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38198 次 |
| 最近记录: |