Gần đây tôi đã sử dụng XPathDocument và XNavigator để phân tích một tệp XML cho một XPath và thuộc tính đã cho. Nó hoạt động rất tốt, khi tôi biết trước XPath là gì.Kiểm tra cách tốt nhất cho sự tồn tại XPath trong một tệp XML?
Đôi khi, XPath sẽ là một trong nhiều giá trị XPath có thể, và tôi muốn kiểm tra xem XPath đã tồn tại hay chưa.
Trong trường hợp tôi nhận được danh pháp sai, đây là những gì tôi đang kêu gọi một XPath - cho XML này blob:
<foo>
<bar baz="This is the value of the attribute named baz">
</foo>
Tôi có thể tìm kiếm những gì tôi đang kêu gọi một XPath của "//foo/bar "và sau đó đọc thuộc tính" baz "để lấy giá trị.
Ví dụ về mã mà tôi sử dụng để làm điều này:
XPathDocument document = new XPathDocument(filename);
XPathNavigator navigator = document.CreateNavigator();
XPathNavigator node = navigator.SelectSingleNode("//foo/bar");
if(node.HasAttributes)
{
Console.WriteLine(node.GetAttribute("baz", string.Empty));
}
Bây giờ, nếu cuộc gọi đến navigator.SelectSingleNode thất bại, nó sẽ trả về một NullReferenceException hoặc một XPathException. Tôi có thể nắm bắt cả hai thứ đó và cấu trúc lại ở trên vào một thử nghiệm để xem liệu XPath có trả về một ngoại lệ hay không, nhưng tôi đã tự hỏi liệu có cách nào tốt hơn không?
Tôi không thấy bất kỳ điều gì rõ ràng trong Intellisense. XPathNavigator có .HasAttributes và .HasChildren nhưng ngắn lặp lại thông qua đường dẫn một nút tại một thời điểm, tôi không thấy bất cứ điều gì đẹp hơn để sử dụng.
gì này có liên quan gì với LINQ? XPathNavigator và XPathDocument không phải là một phần của LINQ to XML. –