वास्तव में जावा XML को बॉक्स से बाहर करने के लिए 4 तरीकों का समर्थन करता है:
DOM Parser / Builder: संपूर्ण XML संरचना को मेमोरी में लोड किया गया है और आप इसके साथ काम करने के लिए प्रसिद्ध डोम तरीकों का उपयोग कर सकते हैं। DOM आपको Xslt परिवर्तनों के साथ दस्तावेज़ को लिखने की अनुमति देता है। उदाहरण:
public static void parse() throws ParserConfigurationException, IOException, SAXException {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setValidating(true);
factory.setIgnoringElementContentWhitespace(true);
DocumentBuilder builder = factory.newDocumentBuilder();
File file = new File("test.xml");
Document doc = builder.parse(file);
// Do something with the document here.
}
SAX पार्सर: एक XML दस्तावेज़ को पढ़ने के लिए पूरी तरह से। सैक्स पार्सर दस्तावेज़ के माध्यम से चलता है और उपयोगकर्ता के कॉलबैक तरीकों को कॉल करता है। किसी दस्तावेज़, तत्व आदि के आरंभ / अंत की विधियाँ हैं। वे org.xml.sax.ContentHandler में परिभाषित हैं और एक खाली सहायक श्रेणी DefaultHandler है।
public static void parse() throws ParserConfigurationException, SAXException {
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser saxParser = factory.newSAXParser();
File file = new File("test.xml");
saxParser.parse(file, new ElementHandler()); // specify handler
}
StAx Reader / Writer: यह डेटास्ट्रीम ओरिएंटेड इंटरफेस के साथ काम करता है। प्रोग्राम अगले तत्व के लिए पूछता है जब यह कर्सर / पुनरावृत्त की तरह तैयार होता है। आप इसके साथ दस्तावेज़ भी बना सकते हैं। दस्तावेज़ पढ़ें:
public static void parse() throws XMLStreamException, IOException {
try (FileInputStream fis = new FileInputStream("test.xml")) {
XMLInputFactory xmlInFact = XMLInputFactory.newInstance();
XMLStreamReader reader = xmlInFact.createXMLStreamReader(fis);
while(reader.hasNext()) {
reader.next(); // do something here
}
}
}
दस्तावेज़ लिखें:
public static void parse() throws XMLStreamException, IOException {
try (FileOutputStream fos = new FileOutputStream("test.xml")){
XMLOutputFactory xmlOutFact = XMLOutputFactory.newInstance();
XMLStreamWriter writer = xmlOutFact.createXMLStreamWriter(fos);
writer.writeStartDocument();
writer.writeStartElement("test");
// write stuff
writer.writeEndElement();
}
}
JAXB: XML दस्तावेजों को पढ़ने के लिए नवीनतम कार्यान्वयन: v2 में जावा 6 का हिस्सा है। यह हमें एक दस्तावेज़ से जावा वस्तुओं को क्रमबद्ध करने की अनुमति देता है। आप एक वर्ग के साथ दस्तावेज़ पढ़ते हैं जो javax.xml.bind.Unmarshaller (आपको JAXBContext.newInstance से इसके लिए एक वर्ग मिलता है) के लिए एक इंटरफ़ेस लागू करता है। संदर्भ को उपयोग की गई कक्षाओं के साथ आरंभीकृत किया जाना है, लेकिन आपको केवल रूट कक्षाओं को निर्दिष्ट करना होगा और स्थिर संदर्भित कक्षाओं के बारे में चिंता करने की आवश्यकता नहीं है। आप यह निर्दिष्ट करने के लिए एनोटेशन का उपयोग करते हैं कि कौन से वर्ग तत्व (@XmlRootElement) होने चाहिए और कौन से फ़ील्ड तत्व (@XmlElement) या गुण हैं (@XmlAttribute, क्या आश्चर्य है!)
public static void parse() throws JAXBException, IOException {
try (FileInputStream adrFile = new FileInputStream("test")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Unmarshaller um = ctx.createUnmarshaller();
RootElementClass rootElement = (RootElementClass) um.unmarshal(adrFile);
}
}
दस्तावेज़ लिखें:
public static void parse(RootElementClass out) throws IOException, JAXBException {
try (FileOutputStream adrFile = new FileOutputStream("test.xml")) {
JAXBContext ctx = JAXBContext.newInstance(RootElementClass.class);
Marshaller ma = ctx.createMarshaller();
ma.marshal(out, adrFile);
}
}
कुछ पुरानी व्याख्यान स्लाइड से कॉपी किए गए उदाहरण ;-)
संपादित करें: "मुझे किस एपीआई का उपयोग करना चाहिए?" के बारे में। वैसे यह निर्भर करता है - सभी API में आपके देखने की क्षमता समान नहीं होती है, लेकिन अगर आप उन कक्षाओं पर नियंत्रण रखते हैं जो आप XML दस्तावेज़ को मैप करने के लिए उपयोग करते हैं JAXB मेरा व्यक्तिगत पसंदीदा, वास्तव में सुरुचिपूर्ण और सरल समाधान है (हालांकि मैंने इसके लिए इसका उपयोग नहीं किया है वास्तव में बड़े दस्तावेज़, यह थोड़ा जटिल हो सकता है)। SAX का उपयोग करना बहुत आसान है और यदि आप मेरी राय में पुराने, क्लिंक एपीआई का उपयोग करना चाहते हैं, तो आपके पास डोम से दूर रहना आसान नहीं है। मुझे नहीं लगता कि कोई भी आधुनिक थर्ड पार्टी लाइब्रेरी है जो विशेष रूप से उपयोगी कुछ भी है जो एसटीएल से गायब है और मानक पुस्तकालयों को बहुत अच्छी तरह से परीक्षण, दस्तावेज और स्थिर होने के सामान्य फायदे हैं।