कोड के साथ XML फ़ाइलें कैसे पढ़ें और लिखें

कोड के साथ XML फ़ाइलें कैसे पढ़ें और लिखें

क्या आप जावा से एक्सएमएल फाइल को पढ़ना और लिखना सीखना चाहेंगे?



एक्सएमएल फ़ाइलें डेटा के भंडारण सहित विभिन्न उद्देश्यों के लिए उपयोग किया जाता है। JSON के लोकप्रिय होने से पहले, XML संरचित डेटा के प्रतिनिधित्व, भंडारण और परिवहन के लिए पसंदीदा प्रारूप था। भले ही हाल के वर्षों में एक्सएमएल की लोकप्रियता कम हो गई है, आप कभी-कभी इसका सामना कर सकते हैं, इसलिए यह सीखना महत्वपूर्ण है कि कोड से इसके साथ कैसे काम किया जाए।

जावा मानक संस्करण (एसई) में शामिल हैं: एक्सएमएल प्रोसेसिंग के लिए जावा एपीआई (जेएक्सपी) , जो एक व्यापक शब्द है जो XML संसाधन के अधिकांश पहलुओं को समाविष्ट करता है। इसमे शामिल है:





  • निर्णय: दस्तावेज़ ऑब्जेक्ट मॉडल में XML कलाकृतियों जैसे तत्व, नोड, विशेषताओं आदि के साथ काम करने के लिए कक्षाएं शामिल हैं। DOM API संपूर्ण XML दस्तावेज़ को प्रोसेसिंग के लिए मेमोरी में लोड करता है, इसलिए यह बड़ी XML फ़ाइलों के साथ काम करने के लिए बहुत उपयुक्त नहीं है।
  • सैक्स: एक्सएमएल के लिए सरल एपीआई एक्सएमएल पढ़ने के लिए एक घटना-संचालित एल्गोरिदम है। यहां एक्सएमएल को एक्सएमएल पढ़ते समय मिलने वाली घटनाओं को फायर करके संसाधित किया जाता है। इस पद्धति का उपयोग करने के लिए मेमोरी की आवश्यकता कम है, लेकिन एपीआई के साथ काम करना डोम के साथ काम करने की तुलना में अधिक जटिल है।
  • स्टैक्स: एक्सएमएल के लिए स्ट्रीमिंग एपीआई एक्सएमएल एपीआई के लिए हाल ही में जोड़ा गया है और एक्सएमएल के उच्च-प्रदर्शन स्ट्रीम फ़िल्टरिंग, प्रोसेसिंग और संशोधन प्रदान करता है। हालांकि यह पूरे XML दस्तावेज़ को मेमोरी में लोड करने से बचता है, यह एक इवेंट-संचालित आर्किटेक्चर के बजाय एक पुल-टाइप आर्किटेक्चर प्रदान करता है, इसलिए SAX API का उपयोग करने की तुलना में एप्लिकेशन को कोड करना और समझना आसान है।

इस लेख में, हम उपयोग करते हैं डोम एपीआई जावा से एक्सएमएल फाइलों को पढ़ने और लिखने का तरीका प्रदर्शित करने के लिए। हम अन्य दो एपीआई को भविष्य के लेखों में शामिल करेंगे।

एक नमूना एक्सएमएल फ़ाइल

इस लेख के प्रयोजन के लिए, हम निम्नलिखित नमूना एक्सएमएल का उपयोग करके अवधारणाओं को प्रदर्शित करते हैं, जिन्हें पाया जा सकता है: यहां :






Gambardella, Matthew
XML Developer's Guide
Computer
44.95
2000-10-01
An in-depth look at creating applications
with XML.


Ralls, Kim
...

एक XML फ़ाइल पढ़ना

आइए DOM API का उपयोग करके XML फ़ाइल को पढ़ने के लिए आवश्यक बुनियादी चरणों को देखें।

का एक उदाहरण प्राप्त करने के लिए पहला कदम है दस्तावेज़ निर्माता . XML दस्तावेज़ों को पार्स करने के लिए बिल्डर का उपयोग किया जाता है। बुनियादी उपयोग के लिए, हम इसे इस तरह करते हैं:

ऐप जो आपको स्कूल वाईफाई का उपयोग करने देता है
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

अब हम पूरे दस्तावेज़ को XML रूट एलिमेंट से शुरू करके मेमोरी में लोड कर सकते हैं। हमारे उदाहरण में, यह है सूची तत्व।

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

और यही है, दोस्तों! XML पढ़ने के लिए DOM API वास्तव में सरल है। अब आपके पास इसके मूल तत्व से शुरू होने वाले संपूर्ण XML दस्तावेज़ तक पहुंच है, सूची . आइए अब देखें कि इसके साथ कैसे काम करना है।

डोम एपीआई का उपयोग करना

अब जबकि हमारे पास XML रूट है तत्त्व , हम जानकारी की दिलचस्प डली निकालने के लिए DOM API का उपयोग कर सकते हैं।

सभी प्राप्त करें किताब मूल तत्व के बच्चे और उनके ऊपर लूप। ध्यान दें कि getChildNodes () रिटर्न सब पाठ, टिप्पणियों आदि सहित बच्चे, हमारे उद्देश्य के लिए, हमें केवल बाल तत्वों की आवश्यकता है, इसलिए हम दूसरों को छोड़ देते हैं।

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
// work with the book Element here
}

माता-पिता को देखते हुए आप एक विशिष्ट बाल तत्व कैसे ढूंढते हैं? निम्न स्थिर विधि पहला मिलान तत्व देता है यदि पाया जाता है, या शून्य। जैसा कि आप देख सकते हैं, प्रक्रिया में बच्चे के नोड्स की सूची प्राप्त करना और उनके माध्यम से लूपिंग निर्दिष्ट नाम के साथ तत्व नोड्स चुनना शामिल है।

static private Node findFirstNamedElement(Node parent,String tagName)
{
NodeList children = parent.getChildNodes();
for (int i = 0, in = children.getLength() ; i Node child = children.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
if ( child.getNodeName().equals(tagName) )
return child;
}
return null;
}

ध्यान दें कि DOM API किसी तत्व के भीतर टेक्स्ट सामग्री को एक अलग प्रकार के नोड के रूप में मानता है TEXT_NODE . इसके अलावा, टेक्स्ट सामग्री को कई आसन्न टेक्स्ट नोड्स में विभाजित किया जा सकता है। तो एक तत्व के भीतर पाठ सामग्री लाने के लिए निम्नलिखित विशेष प्रसंस्करण की आवश्यकता है।

static private String getCharacterData(Node parent)
{
StringBuilder text = new StringBuilder();
if ( parent == null )
return text.toString();
NodeList children = parent.getChildNodes();
for (int k = 0, kn = children.getLength() ; k Node child = children.item(k);
if ( child.getNodeType() != Node.TEXT_NODE )
break;
text.append(child.getNodeValue());
}
return text.toString();
}

इन सुविधा कार्यों के साथ, आइए अब हम अपने नमूना एक्सएमएल से कुछ जानकारी सूचीबद्ध करने के लिए कुछ कोड देखें। हम प्रत्येक पुस्तक के लिए विस्तृत जानकारी दिखाना चाहेंगे, जैसे कि एक पुस्तक कैटलॉग में उपलब्ध होगी।

NodeList books = catalog.getChildNodes();
for (int i = 0, ii = 0, n = books.getLength() ; i Node child = books.item(i);
if ( child.getNodeType() != Node.ELEMENT_NODE )
continue;
Element book = (Element)child;
ii++;
String id = book.getAttribute('id');
String author = getCharacterData(findFirstNamedElement(child,'author'));
String title = getCharacterData(findFirstNamedElement(child,'title'));
String genre = getCharacterData(findFirstNamedElement(child,'genre'));
String price = getCharacterData(findFirstNamedElement(child,'price'));
String pubdate = getCharacterData(findFirstNamedElement(child,'pubdate'));
String descr = getCharacterData(findFirstNamedElement(child,'description'));
System.out.printf('%3d. book id = %s
' +
' author: %s
' +
' title: %s
' +
' genre: %s
' +
' price: %s
' +
' pubdate: %s
' +
' descr: %s
',
ii, id, author, title, genre, price, pubdate, descr);
}

एक्सएमएल आउटपुट लिखना

जावा प्रदान करता है एक्सएमएल ट्रांसफॉर्म एपीआई एक्सएमएल डेटा को बदलने के लिए। हम इस एपीआई का उपयोग के साथ करते हैं पहचान परिवर्तन आउटपुट उत्पन्न करने के लिए।

एक उदाहरण के रूप में, आइए हम एक नया जोड़ें किताब ऊपर प्रस्तुत नमूना सूची के लिए तत्व। पुस्तक का विवरण (जैसे लेखक , शीर्षक , आदि) बाहरी रूप से प्राप्त किया जा सकता है, शायद एक गुण फ़ाइल या डेटाबेस से। हम डेटा लोड करने के लिए निम्न गुण फ़ाइल का उपयोग करते हैं।

id=bk113
author=Jane Austen
title=Pride and Prejudice
genre=Romance
price=6.99
publish_date=2010-04-01
description='It is a truth universally acknowledged, that a single man in possession of a good fortune must be in want of a wife.' So begins Pride and Prejudice, Jane Austen's witty comedy of manners-one of the most popular novels of all time-that features splendidly civilized sparring between the proud Mr. Darcy and the prejudiced Elizabeth Bennet as they play out their spirited courtship in a series of eighteenth-century drawing-room intrigues.

पहला कदम ऊपर प्रस्तुत विधि का उपयोग करके मौजूदा एक्सएमएल फाइल को पार्स करना है। कोड भी नीचे दिखाया गया है।

File file = ...; // XML file to read
Document document = builder.parse(file);
Element catalog = document.getDocumentElement();

हम गुण फ़ाइल का उपयोग करके डेटा लोड करते हैं गुण जावा के साथ प्रदान की गई कक्षा। कोड काफी सरल है और नीचे दिखाया गया है।

String propsFile = ...;
Properties props = new Properties();
try (FileReader in = new FileReader(propsFile)) {
props.load(in);
}

एक बार गुण लोड हो जाने के बाद, हम उन मानों को पुनः प्राप्त करते हैं जिन्हें हम गुण फ़ाइल से जोड़ना चाहते हैं।

String id = props.getProperty('id');
String author = props.getProperty('author');
String title = props.getProperty('title');
String genre = props.getProperty('genre');
String price = props.getProperty('price');
String publish_date = props.getProperty('publish_date');
String descr = props.getProperty('description');

आइए अब एक खाली बनाएँ किताब तत्व।

अमेज़न पैकेज कहता है डिलीवर किया गया लेकिन नहीं
Element book = document.createElement('book');
book.setAttribute('id', id);

में बाल तत्वों को जोड़ना किताब तुच्छ है। सुविधा के लिए, हम आवश्यक तत्वों के नाम a . में एकत्र करते हैं सूची और एक लूप में मान जोड़ें।

List elnames =Arrays.asList('author', 'title', 'genre', 'price',
'publish_date', 'description');
for (String elname : elnames) {
Element el = document.createElement(elname);
Text text = document.createTextNode(props.getProperty(elname));
el.appendChild(text);
book.appendChild(el);
}
catalog.appendChild(book);

और ऐसा ही किया जाता है। NS सूची तत्व में अब नया है किताब तत्व जोड़ा गया। अब जो कुछ बचा है वह अद्यतन XML को लिखना है।

XML लिखने के लिए, हमें एक उदाहरण की आवश्यकता है ट्रांसफार्मर जो नीचे दिखाए अनुसार बनाया गया है। ध्यान दें कि हम आउटपुट एक्सएमएल के इंडेंटेशन का अनुरोध करते हैं सेटऑटपुटप्रॉपर्टी () तरीका।

TransformerFactory tfact = TransformerFactory.newInstance();
Transformer tform = tfact.newTransformer();
tform.setOutputProperty(OutputKeys.INDENT, 'yes');
tform.setOutputProperty('{http://xml.apache.org/xslt}indent-amount', '3');

एक्सएमएल आउटपुट जेनरेट करने का अंतिम चरण ट्रांसफॉर्मेशन लागू करना है। परिणाम आउटपुट स्ट्रीम पर दिखाई देता है, System.out .

tform.transform(new DOMSource(document), new StreamResult(System.out));

किसी फ़ाइल में सीधे आउटपुट लिखने के लिए, निम्न का उपयोग करें।

tform.transform(new DOMSource(document), new StreamResult(new File('output.xml')));

और यह इस लेख को DOM API का उपयोग करके XML फ़ाइलों को पढ़ने और लिखने पर समाप्त करता है।

क्या आपने अपने अनुप्रयोगों में DOM API का उपयोग किया है? यह कैसा प्रदर्शन किया? कृपया हमें नीचे टिप्पणी में बताएं।

साझा करना साझा करना कलरव ईमेल कैनन बनाम निकॉन: कौन सा कैमरा ब्रांड बेहतर है?

कैनन और निकॉन कैमरा इंडस्ट्री के दो सबसे बड़े नाम हैं। लेकिन कौन सा ब्रांड कैमरा और लेंस की बेहतर लाइनअप प्रदान करता है?

आगे पढ़िए
संबंधित विषय
  • प्रोग्रामिंग
  • जावा
लेखक के बारे में जय श्रीधर(17 लेख प्रकाशित) जय श्रीधर की और फ़िल्में या टीवी शो

हमारे न्यूज़लेटर की सदस्यता लें

तकनीकी युक्तियों, समीक्षाओं, निःशुल्क ई-पुस्तकों और अनन्य सौदों के लिए हमारे न्यूज़लेटर से जुड़ें!

सब्सक्राइब करने के लिए यहां क्लिक करें