کوڈ کے ساتھ XML فائلیں کیسے پڑھیں اور لکھیں۔

کوڈ کے ساتھ XML فائلیں کیسے پڑھیں اور لکھیں۔

کیا آپ جاوا سے XML فائل پڑھنا اور لکھنا سیکھنا پسند کریں گے؟





XML فائلیں۔ ڈیٹا کو ذخیرہ کرنے سمیت مختلف مقاصد کے لیے استعمال کیا جاتا ہے۔ JSON کے مقبول ہونے سے پہلے ، XML سٹرکچرڈ ڈیٹا کی نمائندگی ، ذخیرہ اور نقل و حمل کے لیے ترجیحی فارمیٹ تھا۔ اگرچہ حالیہ برسوں میں ایکس ایم ایل کی مقبولیت میں کمی آئی ہے ، آپ کو کبھی کبھار اس کا سامنا کرنا پڑ سکتا ہے لہذا کوڈ سے اس کے ساتھ کام کرنے کا طریقہ سیکھنا ضروری ہے۔





جاوا سٹینڈرڈ ایڈیشن (SE) میں شامل ہیں XML پروسیسنگ کے لیے جاوا API (JAXP) ، جو کہ ایک چھتری اصطلاح ہے جو XML پروسیسنگ کے بیشتر پہلوؤں کا احاطہ کرتی ہے۔ یہ شامل ہیں:





  • فیصلہ: دستاویز آبجیکٹ ماڈل میں XML نمونے جیسے عنصر ، نوڈ ، صفات وغیرہ کے ساتھ کام کرنے کی کلاسیں شامل ہیں۔ DOM API مکمل XML دستاویز کو پروسیسنگ کے لیے میموری میں لوڈ کرتا ہے ، لہذا یہ بڑی XML فائلوں کے ساتھ کام کرنے کے لیے زیادہ موزوں نہیں ہے۔
  • سیکس: XML کے لیے سادہ API XML پڑھنے کے لیے ایونٹ پر مبنی الگورتھم ہے۔ یہاں ایکس ایم ایل کو ایکس ایم ایل پڑھتے وقت پائے جانے والے واقعات کو فائرنگ کرکے پروسیس کیا جاتا ہے۔ اس طریقہ کو استعمال کرنے کے لیے میموری کی ضروریات کم ہیں ، لیکن API کے ساتھ کام کرنا DOM کے ساتھ کام کرنے سے زیادہ پیچیدہ ہے۔
  • سٹیکس: XML کے لیے سٹریمنگ API XML APIs میں ایک حالیہ اضافہ ہے اور XML کی اعلی کارکردگی والے اسٹریم فلٹرنگ ، پروسیسنگ اور ترمیم فراہم کرتا ہے۔ اگرچہ یہ پورے XML دستاویز کو میموری میں لوڈ کرنے سے گریز کرتا ہے ، یہ ایونٹ سے چلنے والے فن تعمیر کے بجائے ایک پل ٹائپ فن تعمیر مہیا کرتا ہے ، لہذا ایپلی کیشن کو سیکس API استعمال کرنے کے بجائے کوڈ اور سمجھنا آسان ہے۔

اس مضمون میں ، ہم استعمال کرتے ہیں DOM API۔ جاوا سے XML فائلوں کو پڑھنے اور لکھنے کا طریقہ ظاہر کرنا۔ ہم مستقبل کے مضامین میں دیگر دو API کا احاطہ کریں گے۔

ایک نمونہ XML فائل۔

اس مضمون کے مقصد کے لیے ، ہم مندرجہ ذیل نمونہ XML کا استعمال کرتے ہوئے تصورات کا مظاہرہ کرتے ہیں ، جو پایا جا سکتا ہے۔ یہاں :






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 فائل پڑھنے کے لیے درکار بنیادی اقدامات کو دیکھیں۔

پہلا قدم ایک مثال حاصل کرنا ہے۔ DocumentBuilder . بلڈر 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 دستاویز تک رسائی حاصل ہے ، تفصیلی فہر ست . آئیے اب دیکھتے ہیں کہ اس کے ساتھ کیسے کام کیا جائے۔





DOM API کا استعمال۔

اب جب کہ ہمارے پاس 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();
}

ان سہولت افعال سے لیس ، آئیے اب ہم اپنے نمونہ XML سے کچھ معلومات لسٹ کرنے کے لیے کچھ کوڈ دیکھیں۔ ہم ہر کتاب کے لیے تفصیلی معلومات دکھانا چاہتے ہیں ، جیسا کہ کتاب کے کیٹلاگ میں دستیاب ہوگا۔

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);
}

XML آؤٹ پٹ لکھنا۔

جاوا فراہم کرتا ہے۔ XML Tranform API۔ XML ڈیٹا کو تبدیل کرنا۔ ہم اس API کو کے ساتھ استعمال کرتے ہیں۔ شناخت کی تبدیلی پیداوار پیدا کرنے کے لیے۔

مثال کے طور پر ، آئیے ایک نیا شامل کریں۔ کتاب اوپر پیش کردہ نمونہ کیٹلاگ کا عنصر۔ کتاب کی تفصیلات (جیسے۔ مصنف ، عنوان ، وغیرہ) بیرونی طور پر حاصل کیا جاسکتا ہے ، شاید پراپرٹیز فائل یا ڈیٹا بیس سے۔ ہم ڈیٹا کو لوڈ کرنے کے لیے درج ذیل پراپرٹیز فائل استعمال کرتے ہیں۔

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.

پہلا مرحلہ موجودہ XML فائل کو اوپر پیش کردہ طریقہ استعمال کرتے ہوئے تجزیہ کرنا ہے۔ کوڈ بھی نیچے دکھایا گیا ہے۔

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);

اور اس طرح کیا جاتا ہے۔ کی تفصیلی فہر ست عنصر کے پاس اب نیا ہے۔ کتاب عنصر شامل. اب جو کچھ باقی ہے وہ ہے تازہ ترین XML لکھنا۔

XML لکھنے کے لیے ، ہمیں ایک مثال کی ضرورت ہے۔ ٹرانسفارمر۔ جو بنایا گیا ہے جیسا کہ ذیل میں دکھایا گیا ہے۔ نوٹ کریں کہ ہم آؤٹ پٹ ایکس ایم ایل کا استعمال کرتے ہوئے انڈینٹیشن کی درخواست کرتے ہیں۔ setOutputProperty () طریقہ

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

XML آؤٹ پٹ پیدا کرنے کا آخری مرحلہ ٹرانسفارمیشن کو لاگو کرنا ہے۔ نتیجہ آؤٹ پٹ سٹریم پر ظاہر ہوتا ہے ، سسٹم آؤٹ۔ .

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 مضامین شائع ہوئے) جے سریدھر سے مزید

ہماری نیوز لیٹر کو سبسکرائب کریں

ٹیک ٹپس ، جائزے ، مفت ای بکس ، اور خصوصی سودوں کے لیے ہمارے نیوز لیٹر میں شامل ہوں!

سبسکرائب کرنے کے لیے یہاں کلک کریں۔