मैं इस फ़ाइल पर एक XPath क्वेरी करना चाहते हैं (अंश दिखाया गया है):जावा XPath: डिफ़ॉल्ट नाम स्थान xmlns वाली क्वेरी
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = domFactory.newDocumentBuilder();
Document document = builder.parse(new File(testFile));
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
xpath.setNamespaceContext(new NamespaceContext() {
public String getNamespaceURI(String prefix) {
...
String result = xpath.evaluate(xpathQueryString, document);
System.out.println(result);
:
<?xml version="1.0" encoding="UTF-8"?>
<!-- MetaDataAPI generated on: Friday, May 25, 2007 3:26:31 PM CEST -->
<ModelClass xmlns="http://xml.sap.com/2002/10/metamodel/webdynpro" xmlns:IDX="urn:sap.com:WebDynpro.ModelClass:2.0">
<ModelClass.Parent>
<Core.Reference package="com.test.mypackage" name="ModelName" type="Model"/>
यह मैं उपयोग कर रहा हूँ कोड का एक टुकड़ा है
मुझे जिस समस्या का सामना करना पड़ रहा है वह यह है कि जब डिफ़ॉल्ट नामस्थान को XPath क्वेरी में संदर्भित किया जाता है, तो getNamespaceURI विधि को हल करने के लिए नहीं कहा जाता है।
//xmlns:ModelClass.Parent/xmlns:Core.Reference[@type=\"Model\"]/@package
अब मैं कर दिया है की कोशिश की एक नकली उपसर्ग d
साथ xmlns
की जगह और फिर getNamespaceURI
विधि तदनुसार लिख कर पार्सर "धोखा देना" (ताकि http://xml.sap.com/2002/10/metamodel/webdynpro
वापस जाने के लिए: उदाहरण के लिए इस क्वेरी कुछ भी अलग नहीं है जब d
का सामना करना पड़ता है)। इस मामले में, getNamespaceURI
कहा जाता है लेकिन XPath अभिव्यक्ति मूल्यांकन का परिणाम हमेशा एक खाली स्ट्रिंग होता है।
यदि मैं फ़ाइल से और XPath क्वेरी अभिव्यक्ति से नामस्थान निकाल देता हूं, तो मैं जिस स्ट्रिंग को चाहता था उसे प्राप्त कर सकता हूं (com.test.mypackage)।
क्या डिफ़ॉल्ट नामस्थान के साथ चीजों को सही तरीके से काम करने का कोई तरीका है?
हाय मार्टिन, मैंने कोशिश की है लेकिन यह काम नहीं करता है ... –
सुनिश्चित करें कि आप नामस्थान जागरूक दस्तावेज़बिल्डर भी बना सकते हैं http://docs.oracle.com/javase/6/docs/api/javax/ नामस्थानों के साथ काम करने से पहले xml/parsers/DocumentBuilderFactory.html # setNamespaceAware% 28boolean% 29। –
यह चाल है। मैंने सोचा कि दस्तावेज़बिल्डर डिफ़ॉल्ट रूप से नामस्थानों से अवगत था। फिर से धन्यवाद। –