"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > XPath का उपयोग करके जावा में नेमस्पेस के साथ XML को कैसे क्वेरी करें?

XPath का उपयोग करके जावा में नेमस्पेस के साथ XML को कैसे क्वेरी करें?

2024-11-10 को प्रकाशित
ब्राउज़ करें:397

How to Query XML with Namespaces in Java Using XPath?

एक्सपीएथ का उपयोग करके जावा में नेमस्पेस के साथ एक्सएमएल को क्वेरी करें

नेमस्पेस से जुड़े तत्वों वाले एक्सएमएल दस्तावेज़ों के साथ काम करते समय, XPath के साथ क्वेरी करना चुनौतीपूर्ण हो सकता है। निम्नलिखित उदाहरण पर विचार करें:

डिफ़ॉल्ट "नो नेमस्पेस" XPath एक्सप्रेशन जैसे "/वर्कबुक/शीट्स/शीट[1]" का उपयोग करना विफल हो जाएगा। ऐसा इसलिए है क्योंकि XML दस्तावेज़ में तत्व एक नेमस्पेस से बंधे हैं, जिसे XPath अभिव्यक्ति में नहीं माना जाता है।

समाधान 1: नेमस्पेस पंजीकृत करें और नेमस्पेस उपसर्ग का उपयोग करें

अनुशंसित दृष्टिकोण नेमस्पेस को नेमस्पेस उपसर्ग के साथ पंजीकृत करना है, जिससे XPath को पढ़ना और बनाए रखना आसान हो जाता है:

NamespaceContext namespaceContext = new NamespaceContext() {
    @Override
    public String getNamespaceURI(String prefix) {
        if (prefix.equals("main")) {
            return "http://schemas.openxmlformats.org/spreadsheetml/2006/main";
        } else if (prefix.equals("r")) {
            return "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
        }
        return null;
    }
};
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();
xPath.setNamespaceContext(namespaceContext);

NodeList nodes = (NodeList) xPath.evaluate("/main:workbook/main:sheets/main:sheet[1]", document, XPathConstants.NODESET);

नेमस्पेस उपसर्ग का उपयोग करते हुए, XPath अभिव्यक्ति बन जाती है "/मेन:वर्कबुक/मेन:शीट्स/मेन:शीट[1]", जो निर्दिष्ट नेमस्पेस से जुड़े तत्वों को सही ढंग से संबोधित करता है।

समाधान 2: जेनेरिक मैच और प्रेडिकेट फ़िल्टर

वैकल्पिक रूप से, नेमस्पेस उपसर्ग के बिना एक XPath अभिव्यक्ति का निर्माण तत्व के लिए एक सामान्य मिलान और एक अनुमानित फ़िल्टर का उपयोग करके किया जा सकता है जो वांछित स्थानीय-नाम() और नेमस्पेस-यूरी() को निर्दिष्ट करता है:

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xPath = xPathFactory.newXPath();

NodeList nodes = (NodeList) xPath.evaluate("/*[local-name()='workbook' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']"  
        "/*[local-name()='sheets' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main']"  
        "/*[local-name()='sheet' and namespace-uri()='http://schemas.openxmlformats.org/spreadsheetml/2006/main'][1]",
        document, XPathConstants.NODESET);

यह विधि क्रियात्मक है और यदि XML दस्तावेज़ में मिश्रित शब्दावलियां मौजूद हैं तो जोखिम उत्पन्न हो सकता है।

निष्कर्ष

नेमस्पेस के साथ XML दस्तावेज़ों से निपटते समय, नेमस्पेस बाइंडिंग पर विचार करना आवश्यक है। नामस्थान को उपसर्ग के साथ पंजीकृत करके या सामान्य XPath अभिव्यक्तियों को सावधानीपूर्वक तैयार करके, सटीक और विश्वसनीय क्वेरीज़ निष्पादित की जा सकती हैं।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3