次の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」(属性の値)を取得するための正しいクエリは何ですか?
ご協力いただきありがとうございます。
var dbName = doc.XPathSelectElement("root/databases/db2").Attribute("name");
XPathSelectElement method は、属性ではなく要素の選択にのみ使用できます。
属性については、より一般的な XPathEvaluateメソッド を使用する必要があります。
var result = ((IEnumerable<object>)doc.XPathEvaluate("root/databases/db2/@name"))
.OfType<XAttribute>()
.Single()
.Value;
// result == "Name2"
値(Name2
)のname
属性、db2
要素、これを試してください:
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);