दिलचस्प पोस्ट
मैं एक गतिशील रूप से एक जावास्क्रिप्ट फ़ाइल अनलोड कैसे कर सकता हूँ? सी में एक पाठ फ़ाइल के माध्यम से चलाने के लिए EOF का उपयोग कैसे करें? एजेएक्स अनुरोध पर फायर ग्रीसंबीकी स्क्रिप्ट नोकोगीरी / एक्सपाथ नामस्थान क्वेरी जेएसटीएल सी: जेएसपी पेज पर ईकाई काम नहीं कर रहा है सबसे तेज जावा स्क्रिप्ट == के साथ तार की तुलना करना जो कि जावा में अंतिम घोषित किया गया है मुख्य () विधि का उपयोग किए बिना कंसोल पर संदेश प्रिंट करना जावा एनटीपी क्लाइंट MySQL प्रश्नों में, क्यों उपयोग के बजाय क्यों उपयोग करें? अब आप एंड्रॉइड स्टूडियो में एक एक्लिप्स परियोजना कैसे आयात कर सकते हैं? आलोक, init, और उद्देश्य सी में नया एंड्रॉइड में स्क्रीन कैप्चर निर्धारित करें कि क्या MKMapView को खींचा / स्थानांतरित किया गया था आईपैड पर चलने के लिए आईफोन ऐप को रोकें

डिफ़ॉल्ट नाम स्थान वाले XML दस्तावेज़ों पर XPath का उपयोग कैसे करें

मैं डिफ़ॉल्ट नाम स्थान पर XML दस्तावेज़ को हेरफेर करना चाहता हूं लेकिन कोई उपसर्ग नहीं है क्या xpath को नेमस्पेस के बिना उपयोग करने का एक तरीका है जैसे कोई नाम स्थान नहीं है?
मेरा मानना ​​है कि अगर हम दस्तावेज बुलडेलरफार्म की नेम्सस्पेसएवेयर संपत्ति झूठी को सेट करते हैं तो यह संभव होना चाहिए। लेकिन मेरे मामले में यह काम नहीं कर रहा है।
क्या मेरी समझ गलत है या मैं कोड में कुछ गड़बड़ कर रहा हूं?

यहां मेरा कोड है:

DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(false); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("E:/test.xml"); XPath xPath = XPathFactory.newInstance().newXPath(); NodeList nl = (NodeList) xPath.evaluate("//author", dDoc, XPathConstants.NODESET); System.out.println(nl.getLength()); } catch (Exception e) { e.printStackTrace(); } 

यहां मेरा एक्सएमएल है:

 <?xml version="1.0" encoding="UTF-8"?> <root xmlns="http://www.mydomain.com/schema"> <author> <book title="t1"/> <book title="t2"/> </author> </root> 

वेब के समाधान से एकत्रित समाधान "डिफ़ॉल्ट नाम स्थान वाले XML दस्तावेज़ों पर XPath का उपयोग कैसे करें"

एक दस्तावेज के लिए XPath प्रसंस्करण जो डिफ़ॉल्ट नेमस्पेस (कोई उपसर्ग) का उपयोग नहीं करता है उसी तरह के संस्करण के लिए XPath प्रोसेसिंग जैसा कि उपसर्ग का उपयोग करता है:

नाम स्थान के योग्य दस्तावेजों के लिए जब आप XPath को निष्पादित करते हैं तो आप नामस्थान का उपयोग कर सकते हैं। आपको नामपेज कन्टेक्सटेक्ट से मिलान करने के लिए XPath में टुकड़ों को प्रीफ़िक्स करना होगा। आपके द्वारा उपयोग किए जाने वाले उपसर्गों को दस्तावेज़ में उपयोग किए गए उपसर्गों से मिलान करने की आवश्यकता नहीं है।

यह आपके कोड के साथ कैसे दिखता है:

 import java.util.Iterator; import javax.xml.namespace.NamespaceContext; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class Demo { public static void main(String[] args) { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); domFactory.setNamespaceAware(true); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("E:/test.xml"); XPath xPath = XPathFactory.newInstance().newXPath(); xPath.setNamespaceContext(new MyNamespaceContext()); NodeList nl = (NodeList) xPath.evaluate("/ns:root/ns:author", dDoc, XPathConstants.NODESET); System.out.println(nl.getLength()); } catch (Exception e) { e.printStackTrace(); } } private static class MyNamespaceContext implements NamespaceContext { public String getNamespaceURI(String prefix) { if("ns".equals(prefix)) { return "http://www.mydomain.com/schema"; } return null; } public String getPrefix(String namespaceURI) { return null; } public Iterator getPrefixes(String namespaceURI) { return null; } } } 

नोट: मैंने डेनिस द्वारा सुझाए गए सही XPath का भी इस्तेमाल किया।

निम्नलिखित भी काम करने के लिए प्रतीत होता है, और आपके मूल प्रश्न के करीब है:

 import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.xpath.XPath; import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.w3c.dom.Document; import org.w3c.dom.NodeList; public class Demo { public static void main(String[] args) { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = domFactory.newDocumentBuilder(); Document dDoc = builder.parse("E:/test.xml"); XPath xPath = XPathFactory.newInstance().newXPath(); NodeList nl = (NodeList) xPath.evaluate("/root/author", dDoc, XPathConstants.NODESET); System.out.println(nl.getLength()); } catch (Exception e) { e.printStackTrace(); } } } 

Blaise Doughan सही है, संलग्न कोड सही है।
समस्या कहीं बेहतर थी मैं एक्लिप्स आईडीई में एप्लिकेशन लॉन्चर के माध्यम से अपने सभी परीक्षणों को चला रहा था और कुछ भी काम नहीं कर रहा था। फिर मुझे पता चला कि ग्रहण परियोजना सभी दुःख का कारण था। मैंने कमांड प्रॉम्प्ट से अपनी कक्षा में भाग लिया, यह काम किया। एक नया ग्रहण प्रोजेक्ट बनाया और वहां उसी कोड को चिपकाया, वहां भी वहां काम किया। अपने समय और प्रयासों के लिए सभी लोगों को धन्यवाद

मैंने एक सरल NamespaceContext क्रियान्वयन ( यहां ) लिखा है, जो मददगार हो सकता है। इसमें इनपुट के रूप में Map<String, String> लगता है, जहां key एक उपसर्ग है, और value एक नेमस्पेस है।

यह नामस्थान कॉन्टैक्ट स्पेशिफिकेशन का अनुसरण करता है, और आप देख सकते हैं कि यह इकाई परीक्षणों में कैसे काम करता है।

 Map<String, String> mappings = new HashMap<>(); mappings.put("foo", "http://foo"); mappings.put("foo2", "http://foo"); mappings.put("bar", "http://bar"); context = new SimpleNamespaceContext(mappings); context.getNamespaceURI("foo"); // "http://foo" context.getPrefix("http://foo"); // "foo" or "foo2" context.getPrefixes("http://foo"); // ["foo", "foo2"] 

ध्यान दें कि इसका Google Guava पर निर्भरता है