java - Can't make XPath to work with complex namespaces -
इस तरह से XML के साथ शुरू करें:
& lt;? Xml version = " 1.0 "एन्कोडिंग =" यूटीएफ -8 "? & Gt; & Lt; xdp: xdp xmlns: xdp = "http://ns.adobe.com/xdp/" टाइमस्टैम्प = "2009-11-26 टी 15: 21: 36Z" यूयूआईडी = "02334fb6-3ae8-4094-9279-29ff59fc5bc8" & gt ; & Lt; config xmlns = "http://www.xfa.org/schema/xci/2.6/" & gt; ... & lt; / config & gt; & Lt; टेम्पलेट xmlns = "http://www.xfa.org/schema/xfa-template/2.6/" & gt; & Lt; सबफ़ॉर्म नाम = "मूवी" w = "196.85 मिमी" & gt; & Lt; फ़ील्ड नाम = "अवधि" y = "11.7mm" x = "2.175mm" w = "62mm" h = "9mm" & gt; ... & lt; / फ़ील्ड & gt; & Lt; क्षेत्र का नाम = "आईएमडीबी" वाई = "11.7mm" x = "65.675 मिमी" w = "62mm" h = "9mm" & gt; ... & lt; / फ़ील्ड & gt; ... & lt; subform name = "directors" लेआउट = "टीबी" x = "2.175mm" y = "30.75 मिमी" w = "95.25 मिमी" & gt; ... & lt; क्षेत्र का नाम = "निदेशक" w = "91.075 मिमी" h = "9mm" & gt; ... & lt; / फ़ील्ड & gt; ... & lt; / subform & gt; ... & lt; / subform & gt; ... & lt; / टेम्पलेट & gt; ... & lt; / xdp: xdp & gt; (जो लोग सोच रहे हैं, यह पीडीएफ के एक्सफा दस्तावेज का सरलीकृत संस्करण है।)
अब मुझे सभी & Lt; फ़ील्ड & gt; तत्वों में नोडलिस्ट , और XPath इस उद्देश्य के लिए एकदम सही होगा: XPath xpath = XPathFactory । .newInstance () newXPath (); Xpath.setNamespaceContext (नया नेमस्पेस कंसटेक्स () {सार्वजनिक स्ट्रिंग मिलनामास्पेसयूआरआई (स्ट्रिंग पी) {वापसी "http://www.xfa.org/schema/xfa-template/2.6/"} सार्वजनिक स्ट्रिंग मिलफिफ़िक्स (स्ट्रिंग ARG0) {वापसी नल ;} सार्वजनिक इटरेटर & lt;? & Gt; getPrefixes (स्ट्रिंग अरजिट) {वापसी नल;}}); नोड लिस्ट फ़ील्ड = (नोडलिस्ट) xpath.evaluate ("// field", दस्तावेज़, XPathConstants.NODESET); अब वह काम नहीं करता, परिणाम खाली है। मैंने रिक्त में getNamespaceURI भी लौटने की कोशिश की है; अगर "xdp" और null अन्यथा नहीं है तो "http://ns.adobe.com/xdp/" लौट रहा है। मैंने मैन्युअल रूप से & lt; टेम्पलेट & gt; तत्व प्राप्त करने की कोशिश की है और उस नोड से मूल्यांकन करें, ऊपर NamespaceContext के साथ या getNamespaceURI < / कोड> रिटर्निंग null ... इस अति जटिल प्रणाली के साथ कुछ भी काम नहीं करता है, और मैं यह नहीं जानता कि मैं क्या चाहता हूं आप गलत तरीके से कर रहे हैं।
आपको अपने रास्ते में उपसर्ग का उपयोग करना चाहिए // df: field और निश्चित रूप से सुनिश्चित करें कि उपसर्ग नामस्थान यूआरआइ से जुड़ा है जैसे xpath.setNamespaceContext (नया नेमस्पेस कंसटेक्स () {सार्वजनिक स्ट्रिंग getNamespaceURI ( स्ट्रिंग पी) {if (p.equals ("df")) {वापसी "http://www.xfa.org/schema/xfa-template/2.6/"}} सार्वजनिक स्ट्रिंग मिलना पिरफिक्स (स्ट्रिंग ARG0) {return null ;} सार्वजनिक इटरेटर & lt;? & Gt; getPrefixes (स्ट्रिंग अरजिट) {वापसी नल;}});
Comments
Post a Comment