2011-12-02 49 views
10

Tôi cần giới hạn tìm kiếm nút xpath thành cây con. Tôi hiện đang sử dụng phương pháp dưới đây nhưng nó tìm kiếm trên một tài liệu toàn bộ quan trọng cho dù tôi cung cấp cho nó tài liệu hoặc nút tôi muốn tìm kiếm từ.tìm kiếm xpath trên cây con

private NodeList findNodes(Object obj,String xPathString) throws ... { 
    XPath xPath = XPathFactory.newInstance().newXPath(); 
    XPathExpression expression = xPath.compile(xPathString); 
    return (NodeList) expression.evaluate(obj, XPathConstants.NODESET); 
} 

Giải pháp Tôi đang sử dụng bây giờ là tôi tạo tài liệu mới, nối thêm nút và tìm kiếm trên tài liệu mới, sau đó hợp nhất. Tôi muốn cải thiện điều này. Nó có thể được thực hiện?

XPath tôi đang sử dụng là //nodeName.

+2

cho chúng ta thấy xpath bạn đang sử dụng – soulcheck

+0

Tôi tin rằng những hạn chế sẽ phải được thực hiện trong biểu thức XPath. – McDowell

+0

tôi đã thêm xpath vào phần chỉnh sửa. –

Trả lời

13

Bạn đang tìm kiếm trên các trục // có nghĩa là 'bất kỳ nút hậu duệ của document root',

Thay đổi nó để .// trục (descendands của context node) và nó sẽ làm việc như mong đợi.

2

.//nodeName sẽ tìm kiếm phần tử nodeName ở bất kỳ đâu trong nút ngữ cảnh đã cho.

8

Bạn cần phải phân biệt giữa mộttuyệt đốitương đối biểu hiệnXPath.

Câu hỏi hay +1.

Trong XPath, mọi biểu thức bắt đầu bằng /biểu thức XPath tuyệt đối. Biểu thức XPath tuyệt đối được đánh giá trên tài liệu hiện tại hoàn chỉnh.

Ngược lại, tương đối Biểu thức XPath được đánh giá khỏi nút (ngữ cảnh) hiện tại.

Điều này giải thích sự cố được báo cáo: //nodeName là biểu thức XPath tuyệt đối.

Những gì bạn muốn là một biểu hiện tương đối XPath, chẳng hạn như:

.//nodeName 
Các vấn đề liên quan