Java में XML के साथ काम करना: DOM, SAX, StAX और JAXB

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में XML के साथ काम करना: DOM, SAX, StAX और JAXB

XML (eXtensible Markup Language) आज भी स्ट्रक्चर्ड डेटा को स्टोर और ट्रांसफर करने के लिए एक प्रमुख फॉर्मेट है। Java में XML के साथ काम करने के कई तरीके हैं, जो छोटे कॉन्फ़िगरेशन फ़ाइलों से लेकर गीगाबाइट आकार की फ़ाइलों तक, अलग-अलग ज़रूरतों के लिए उपयुक्त हैं। इस आर्टिकल में हम चार मुख्य तरीकों को समझेंगे: DOM, SAX, StAX और JAXB।

1. DOM (Document Object Model) — पूरा डेटा मेमोरी में लोड करना

DOM पार्सर पूरे XML डॉक्यूमेंट को मेमोरी में लोड करके एक ट्री-स्ट्रक्चर बनाता है। यह नेविगेशन और मॉडिफिकेशन के लिए सुविधाजनक है, लेकिन बड़ी फ़ाइलों के लिए कारगर नहीं है।

DOM का उपयोग करके XML पढ़ने का उदाहरण:

import javax.xml.parsers.*;
import org.w3c.dom.*;

public class DomExample {
    public static void main(String[] args) throws Exception {
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document doc = builder.parse("books.xml");

        NodeList bookList = doc.getElementsByTagName("book");
        for (int i = 0; i < bookList.getLength(); i++) {
            Element book = (Element) bookList.item(i);
            String title = book.getElementsByTagName("title").item(0).getTextContent();
            String author = book.getElementsByTagName("author").item(0).getTextContent();
            System.out.println("पुस्तक: " + title + ", लेखक: " + author);
        }
    }
}
  • फायदे: किसी भी नोड तक आसान पहुँच, XPath सपोर्ट, डॉक्यूमेंट में बदलाव की सुविधा।
  • नुकसान: अधिक मेमोरी की ज़रूरत, बड़ी फ़ाइलों के लिए धीमा।
  • कब उपयोग करें: कॉन्फ़िगरेशन फ़ाइलें, छोटे डॉक्यूमेंट (कुछ MB तक)।

2. SAX (Simple API for XML) — इवेंट-बेस्ड स्ट्रीमिंग पार्सर

SAX XML को क्रमिक रूप से पढ़ता है और इवेंट जनरेट करता है (एलिमेंट की शुरुआत, टेक्स्ट, एलिमेंट का अंत)। आप केवल ज़रूरी इवेंट को प्रोसेस करते हैं — इससे किसी भी आकार की फ़ाइलों के साथ काम करना संभव होता है।

SAX का उपयोग करके XML प्रोसेसिंग का उदाहरण:

import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;

public class SaxExample extends DefaultHandler {
    private boolean inTitle = false;

    public void startElement(String uri, String localName, String qName, Attributes attrs) {
        if (qName.equals("title")) inTitle = true;
    }

    public void characters(char[] ch, int start, int length) {
        if (inTitle) System.out.println("शीर्षक: " + new String(ch, start, length));
    }

    public void endElement(String uri, String localName, String qName) {
        if (qName.equals("title")) inTitle = false;
    }

    public static void main(String[] args) throws Exception {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        parser.parse("books.xml", new SaxExample());
    }
}
  • फायदे: न्यूनतम मेमोरी खपत, तेज़ गति।
  • नुकसान: पिछले एलिमेंट पर वापस नहीं जा सकते, डॉक्यूमेंट को मॉडिफाई करना मुश्किल।
  • कब उपयोग करें: बड़ी XML फ़ाइलें (लॉग्स, DB डंप, रिपोर्ट्स)।

3. StAX (Streaming API for XML) — कर्सर-आधारित स्ट्रीमिंग पार्सर

StAX, SAX का एक आधुनिक विकल्प है। इसमें आप खुद XML स्ट्रीम पर कर्सर घुमाकर रीडिंग को कंट्रोल करते हैं। दो मोड उपलब्ध हैं: Cursor API (इवेंट इटरेटर) और Event API (इवेंट हैंडलिंग)।

Cursor API (XMLStreamReader) का उदाहरण:

import javax.xml.stream.*;

public class StaxExample {
    public static void main(String[] args) throws Exception {
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = factory.createXMLStreamReader(
            new FileInputStream("books.xml"));

        while (reader.hasNext()) {
            int event = reader.next();
            if (event == XMLStreamConstants.START_ELEMENT) {
                if (reader.getLocalName().equals("title")) {
                    System.out.println("शीर्षक: " + reader.getElementText());
                }
            }
        }
        reader.close();
    }
}
  • फायदे: पुल-बेस्ड (आप कंट्रोल करते हैं), SAX से ज़्यादा लचीला, दो API विकल्प।
  • नुकसान: DOM जितना सुविधाजनक नहीं, थोड़ा जटिल कोड।
  • कब उपयोग करें: बड़ी फ़ाइलें जहाँ आपको पढ़ने पर पूरा नियंत्रण चाहिए।

4. JAXB (Java Architecture for XML Binding) — XML को Java ऑब्जेक्ट में बदलना

JAXB XML को सीधे Java ऑब्जेक्ट में मैप करता है (और इसका उल्टा)। आपको पार्सिंग की चिंता नहीं करनी पड़ती — बस एनोटेशन के साथ क्लास डिफाइन करें।

JAXB का उपयोग करके XML पढ़ने का उदाहरण:

import javax.xml.bind.*;
import javax.xml.bind.annotation.*;

@XmlRootElement
class Book {
    String title;
    String author;
    // गेटर्स और सेटर्स...
}

public class JaxbExample {
    public static void main(String[] args) throws Exception {
        JAXBContext context = JAXBContext.newInstance(Book.class);
        Unmarshaller unmarshaller = context.createUnmarshaller();
        Book book = (Book) unmarshaller.unmarshal(new File("book.xml"));
        System.out.println("पुस्तक: " + book.title + ", लेखक: " + book.author);
    }
}
  • फायदे: बहुत आसान, कोड कम लिखना पड़ता है, ऑब्जेक्ट-ओरिएंटेड।
  • नुकसान: बड़ी फ़ाइलों के लिए धीमा, XML स्कीमा पर निर्भर।
  • कब उपयोग करें: REST API, कॉन्फ़िगरेशन, डेटा बाइंडिंग।

निष्कर्ष: कौन सा तरीका चुनें?

सही तरीका आपकी ज़रूरत पर निर्भर करता है:

  • DOM: छोटी फ़ाइलें, जहाँ आपको डेटा को बदलना या XPath का उपयोग करना है।
  • SAX: बहुत बड़ी फ़ाइलें, जहाँ मेमोरी बचाना ज़रूरी है।
  • StAX: बड़ी फ़ाइलें, जहाँ आपको पढ़ने पर पूरा नियंत्रण चाहिए।
  • JAXB: तेज़ डेवलपमेंट और ऑब्जेक्ट-ओरिएंटेड दृष्टिकोण।

अब आप Java में XML हैंडलिंग के लिए तैयार हैं! अपनी प्रोजेक्ट की ज़रूरत के अनुसार सही तरीका चुनें और कोडिंग शुरू करें।

अनुशंसाएँ