जावा में XML के साथ कार्य: DOM, SAX, StAX और JAXB
XML (eXtensible Markup Language) संरचित डेटा को संग्रहीत और स्थानांतरित करने के लिए प्रमुख प्रारूपों में से एक बना हुआ है। जावा में XML के साथ कार्य करने के लिए कई अंतर्निहित और लोकप्रिय लाइब्रेरी मौजूद हैं। इस लेख में हम सभी मुख्य दृष्टिकोणों को समझेंगे: क्लासिक DOM और SAX से लेकर आधुनिक JAXB तक।
1. DOM (Document Object Model) — दस्तावेज़ तक पूर्ण पहुँच
DOM-पार्सर पूरे XML दस्तावेज़ को मेमोरी में एक ट्री संरचना के रूप में लोड करता है। यह दस्तावेज़ पर पूर्ण नियंत्रण देता है: आप नोड्स को पढ़, बदल, हटा और जोड़ सकते हैं।
DOM के लाभ:
- दस्तावेज़ के किसी भी तत्व तक स्वेच्छ पहुँच
- XML संरचना में संशोधन की संभावना
- सहज ज्ञान युक्त ऑब्जेक्ट मॉडल
कमियाँ:
- उच्च मेमोरी खपत (पूरा दस्तावेज़ RAM में)
- बड़ी फ़ाइलों के साथ धीमी कार्यप्रणाली
DOM के उपयोग का उदाहरण:
import javax.xml.parsers.*;import org.w3c.dom.*;import java.io.*;
public class DomExample { public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new File("books.xml"));
NodeList bookList = document.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); } }}2. SAX (Simple API for XML) — स्ट्रीम पार्सिंग
SAX एक इवेंट-ओरिएंटेड पार्सर है। यह XML को क्रमिक रूप से पढ़ता है और ओपनिंग/क्लोज़िंग टैग, टेक्स्ट या एट्रीब्यूट्स मिलने पर callback विधियों को कॉल करता है। मेमोरी का उपयोग न्यूनतम होता है।
SAX का उपयोग कब करें:
- बहुत बड़ी XML फ़ाइलें (सैकड़ों मेगाबाइट)
- केवल पढ़ना, बिना संशोधन के
- सीमित डिवाइस संसाधन
SAX पार्सर का उदाहरण:
import org.xml.sax.*;import org.xml.sax.helpers.*;import javax.xml.parsers.*;
public class SaxExample { public static void main(String[] args) throws Exception { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser saxParser = factory.newSAXParser();
DefaultHandler handler = new DefaultHandler() { boolean isTitle = false;
public void startElement(String uri, String localName, String qName, Attributes attributes) { if (qName.equalsIgnoreCase("title")) isTitle = true; }
public void characters(char ch[], int start, int length) { if (isTitle) { System.out.println("Title: " + new String(ch, start, length)); isTitle = false; } } };
saxParser.parse("books.xml", handler); }}3. StAX (Streaming API for XML) — सुविधाजनक स्ट्रीम पार्सिंग
StAX, DOM और SAX के बीच एक समझौता है। यह भी स्ट्रीम मोड में काम करता है, लेकिन अधिक सुविधाजनक pull-इंटरफ़ेस प्रदान करता है (आप स्वयं अगला तत्व अनुरोध करते हैं)।
StAX के साथ कार्य करने के दो तरीके:
- XMLStreamReader — पढ़ने के लिए
- XMLStreamWriter — लिखने के लिए
import javax.xml.stream.*;import java.io.*;
public class StaxExample { public static void main(String[] args) throws Exception { XMLInputFactory factory = XMLInputFactory.newInstance(); XMLStreamReader reader = factory.createXMLStreamReade