2009-09-25 30 views
6

Nếu tôi gọi SelectNodes trên một XmlElement, và vượt qua truy vấn XPath như thế này:SelectNodes không scoped để Element

nút XmlNodeList = xmlElement.SelectNodes ("// OtherNode");

Danh sách nút sẽ dành cho tất cả các phần tử OtherNode trong tài liệu không chỉ các phần tử từ xmlElement.

Tôi dường như nhớ lại rằng điều này là do thiết kế, và vì một lý do chính đáng, nhưng tôi không thể nhớ lý do tốt đó là gì, cũng không phải là cách để vượt qua nó.

Trả lời

10

Chỉ cần thêm dot vào đầu số xpath. Các dot chọn nút hiện tại:

XmlNodeList nodes = xmlElement.SelectNodes(".//OtherNode"); 
+1

Một lời giải thích đơn giản về "tại sao" là nó giống như với các đường dẫn tập tin - '/ foo/bar' là một đường dẫn tuyệt đối, nơi mà hàng đầu'/'có nghĩa là "bắt đầu từ gốc "; 'foo/bar' là đường dẫn tệp tương đối, cũng có thể được viết bằng'./foo/bar'. Tương tự như vậy với XPath, và ở đó nó áp dụng cho cả '/' và '//' - do đó dẫn đầu '/' luôn luôn có nghĩa là "bắt đầu từ nút gốc trong cây mà nút ngữ cảnh hiện tại thuộc về". –

+2

Tại sao không chỉ "OtherNode"? – Joren

+3

Bởi vì anh ta muốn xem xét tất cả các hậu duệ, và không chỉ là trẻ em ngay lập tức? –

Các vấn đề liên quan