पर XPath चलाना मैं xpath लुकअप द्वारा लौटाए गए नोड्स पर एक एक्सपैथ लुकअप करने की कोशिश कर रहा हूं, लेकिन ऐसा लगता है कि यह अपेक्षित काम नहीं करता है। दस्तावेज़ के बच्चे नोड्स पर निष्पादित एक्सपैथ के खिलाफ निष्पादित किया गया प्रतीत होता है दस्तावेज के रूट रूट नोड (उदाहरण में, इन्वेंट्री टैग।), प्रदान किए गए नोड की जड़ के बजाय।बच्चे नोड
क्या मुझे यहां कुछ याद आ रही है? मैं XPath के लिए नया हूँ।
इसके अलावा, कृपया "बस // पुस्तक [लेखक = 'नील स्टीफनसन'/शीर्षक" का उत्तर न दें। मेरे पास वैध उपयोग केस है, और यह एक सरल उदाहरण है।
कोड स्निपेट
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document doc = builder.parse("src/main/java/books.xml");
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
Node book = (Node) xpath.evaluate("//book[author='Neal Stephenson']", doc, XPathConstants.NODE);
Node title = (Node) xpath.evaluate("/title", book, XPathConstants.NODE); // I get null here.
Node inventory = (Node) xpath.evaluate("/inventory", book, XPathConstants.NODE); // this returns a node.
book.xml
<inventory>
<book year="2000">
<title>Snow Crash</title>
<author>Neal Stephenson</author>
<publisher>Spectra</publisher>
<isbn>0553380958</isbn>
<price>14.95</price>
</book>
<book year="2005">
<title>Burning Tower</title>
<author>Larry Niven</author>
<author>Jerry Pournelle</author>
<publisher>Pocket</publisher>
<isbn>0743416910</isbn>
<price>5.99</price>
</book>
<book year="1995">
<title>Zodiac</title>
<author>Neal Stephenson</author>
<publisher>Spectra</publisher>
<isbn>0553573862</isbn>
<price>7.50</price>
</book>
<!-- more books... -->
</inventory>
अन्य लोगों ने आपके प्रश्न के अच्छे उत्तर दिए हैं। ध्यान दें कि '// बुक' और '//' से शुरू होने वाली अन्य अभिव्यक्ति प्रदर्शन को प्रभावित कर सकती हैं, क्योंकि संपूर्ण डोम पेड़ की खोज की जानी चाहिए। '/ सूची/पुस्तक' अधिक कुशल है। एक ही नोट पर, यदि एक XPath अभिव्यक्ति का उपयोग कई बार किया जा रहा है, तो आपको संभवतः 'XPath.compile()' के साथ इसे संकलित करना चाहिए और परिणामस्वरूप 'XPathExpression.evaluate()' को चलाने के बजाय, 'XPath को बार-बार कॉल करने की बजाय .evaluate() '। – markusk
यहां उत्तर दिया गया: http://stackoverflow.com/questions/8358994/xpath-search-on-subtree – Benj
यह जावा में न केवल इस तरह से काम करता है। .NET एक ही काम करता है। – ajeh