Tôi muốn truy vấn đối tượng XDocument
cho một đường dẫn cụ thể, (ví dụ: "/ path/to/element/I/want") nhưng tôi không biết cách tiếp tục.Làm cách nào để truy vấn XDocument bằng 'đường dẫn'?
Trả lời
soemthing tương tự như điều này có thể làm việc:
var path = "/path/to/element/I/want";
var route = path.Split(new []{'/'}, StringSplitOptions.RemoveEmptyEntries);
XElement result = null;
foreach (var node in route)
{
if (result == null)
{
result = _xmlDocument.Element(node);
}
else
{
result = result.Element(node);
}
}
return result;
'RemoveEmptyEntries' không phải là một ý tưởng hay,' // 'có một ý nghĩa cụ thể trong XPath và nó tìm kiếm tất cả các hậu duệ. – svick
Bạn có thể sử dụng phương pháp từ System.Xml.XPath.Extensions
để làm điều này.
Ví dụ, nếu bạn muốn chọn một yếu tố duy nhất, bạn sẽ sử dụng XPathSelectElement()
:
var element = doc.XPathSelectElement("/path/to/element/I/want");
Các truy vấn không phải là con đường đơn giản như những gì bạn mô tả, họ sử dụng ngôn ngữ XPath.
Mặc dù đây là một bài hơi cũ, cần lưu ý rằng LINQ-to-XML
có thể được sử dụng như là một thay thế cho System.XML.XPath
để tìm các yếu tố dựa trên một con đường trong một Ví dụ XDocument
:
var results = x.Elements("path").Elements("to").Elements("element").Elements("I").Elements("want").FirstOrDefault();
Lưu ý: Lệnh LINQ to XML có thể cần phải được thay đổi để phù hợp với cấu trúc thực tế và/hoặc cardinality của XML.
Tôi cần làm điều tương tự. Điều này repo có một số bài kiểm tra đơn vị demoing truy vấn XDocument với XPathEvaluate()
có thể trùng lặp [cách sử dụng XPath với XDocument?] (Http://stackoverflow.com/questions/6209841/how-to-use-xpath-with -xdocument) –
Bạn có thể xem ví dụ về các đường dẫn khác nhau, có/không có định nghĩa vùng tên, v.v. tại đây: http://stackoverflow.com/a/38272604/5838538. – Jelgab