PHP
एक्सएमएल
खोज…
XMLWriter का उपयोग करके एक XML फ़ाइल बनाएँ
XMLWriter ऑब्जेक्ट को त्वरित करें:
$xml = new XMLWriter();
आगे वह फ़ाइल खोलें, जिसमें आप लिखना चाहते हैं। उदाहरण के लिए, /var/www/example.com/xml/output.xml
पर लिखने के लिए, उपयोग करें:
$xml->openUri('file:///var/www/example.com/xml/output.xml');
दस्तावेज़ शुरू करने के लिए (XML खुला टैग बनाएँ):
$xml->startDocument('1.0', 'utf-8');
यह आउटपुट होगा:
<?xml version="1.0" encoding="UTF-8"?>
अब आप तत्वों को लिखना शुरू कर सकते हैं:
$xml->writeElement('foo', 'bar');
यह XML उत्पन्न करेगा:
<foo>bar</foo>
यदि आपको सादे मानों के साथ केवल नोड्स की तुलना में कुछ अधिक जटिल चाहिए, तो आप एक तत्व को "शुरू" भी कर सकते हैं और इसे बंद करने के लिए इसमें विशेषताओं को जोड़ सकते हैं:
$xml->startElement('foo');
$xml->writeAttribute('bar', 'baz');
$xml->writeCdata('Lorem ipsum');
$xml->endElement();
यह आउटपुट होगा:
<foo bar="baz"><![CDATA[Lorem ipsum]]></foo>
DOMDocument के साथ एक XML दस्तावेज़ पढ़ें
SimpleXML के समान, आप XML को स्ट्रिंग से या XML फ़ाइल से पार्स करने के लिए DOMDocument का उपयोग कर सकते हैं
1. एक तार से
$doc = new DOMDocument();
$doc->loadXML($string);
2. एक फाइल से
$doc = new DOMDocument();
$doc->load('books.xml');// use the actual file path. Absolute or relative
पार्सिंग का उदाहरण
निम्नलिखित XML को ध्यान में रखते हुए:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>PHP - An Introduction</name>
<price>$5.95</price>
<id>1</id>
</book>
<book>
<name>PHP - Advanced</name>
<price>$25.00</price>
<id>2</id>
</book>
</books>
यह इसे पार्स करने के लिए एक उदाहरण कोड है
$books = $doc->getElementsByTagName('book');
foreach ($books as $book) {
$title = $book->getElementsByTagName('name')->item(0)->nodeValue;
$price = $book->getElementsByTagName('price')->item(0)->nodeValue;
$id = $book->getElementsByTagName('id')->item(0)->nodeValue;
print_r ("The title of the book $id is $title and it costs $price." . "\n");
}
यह आउटपुट होगा:
पुस्तक 1 का शीर्षक PHP - An परिचय है और इसकी कीमत $ 5.95 है।
पुस्तक 2 का शीर्षक PHP है - उन्नत और इसकी कीमत $ 25.00 है।
DOMDocument का उपयोग करके XML बनाएँ
एक एक्सएमएल DOMDocument का उपयोग कर बनाने के लिए, मूल रूप से, हम सभी टैग बनाने के लिए और की जरूरत का उपयोग कर विशेषताओं createElement()
और createAttribute()
तरीकों और उन लोगों के साथ XML संरचना बनाने appendChild()
।
नीचे दिए गए उदाहरण में टैग, विशेषताएँ, एक CDATA अनुभाग और दूसरे टैग के लिए एक अलग नामस्थान शामिल हैं:
$dom = new DOMDocument('1.0', 'utf-8');
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
//create the main tags, without values
$books = $dom->createElement('books');
$book_1 = $dom->createElement('book');
// create some tags with values
$name_1 = $dom->createElement('name', 'PHP - An Introduction');
$price_1 = $dom->createElement('price', '$5.95');
$id_1 = $dom->createElement('id', '1');
//create and append an attribute
$attr_1 = $dom->createAttribute('version');
$attr_1->value = '1.0';
//append the attribute
$id_1->appendChild($attr_1);
//create the second tag book with different namespace
$namespace = 'www.example.com/libraryns/1.0';
//include the namespace prefix in the books tag
$books->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:ns', $namespace);
$book_2 = $dom->createElementNS($namespace,'ns:book');
$name_2 = $dom->createElementNS($namespace, 'ns:name');
//create a CDATA section (that is another DOMNode instance) and put it inside the name tag
$name_cdata = $dom->createCDATASection('PHP - Advanced');
$name_2->appendChild($name_cdata);
$price_2 = $dom->createElementNS($namespace, 'ns:price', '$25.00');
$id_2 = $dom->createElementNS($namespace, 'ns:id', '2');
//create the XML structure
$books->appendChild($book_1);
$book_1->appendChild($name_1);
$book_1->appendChild($price_1);
$book_1->appendChild($id_1);
$books->appendChild($book_2);
$book_2->appendChild($name_2);
$book_2->appendChild($price_2);
$book_2->appendChild($id_2);
$dom->appendChild($books);
//saveXML() method returns the XML in a String
print_r ($dom->saveXML());
यह निम्न XML आउटपुट करेगा:
<?xml version="1.0" encoding="utf-8"?>
<books xmlns:ns="www.example.com/libraryns/1.0">
<book>
<name>PHP - An Introduction</name>
<price>$5.95</price>
<id version="1.0">1</id>
</book>
<ns:book>
<ns:name><![CDATA[PHP - Advanced]]></ns:name>
<ns:price>$25.00</ns:price>
<ns:id>2</ns:id>
</ns:book>
</books>
SimpleXML के साथ एक XML दस्तावेज़ पढ़ें
आप XML को स्ट्रिंग से या XML फ़ाइल से पार्स कर सकते हैं
1. एक तार से
$xml_obj = simplexml_load_string($string);
2. एक फाइल से
$xml_obj = simplexml_load_file('books.xml');
पार्सिंग का उदाहरण
निम्नलिखित XML को ध्यान में रखते हुए:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<name>PHP - An Introduction</name>
<price>$5.95</price>
<id>1</id>
</book>
<book>
<name>PHP - Advanced</name>
<price>$25.00</price>
<id>2</id>
</book>
</books>
यह इसे पार्स करने के लिए एक उदाहरण कोड है
$xml = simplexml_load_string($xml_string);
$books = $xml->book;
foreach ($books as $book) {
$id = $book->id;
$title = $book->name;
$price = $book->price;
print_r ("The title of the book $id is $title and it costs $price." . "\n");
}
यह आउटपुट होगा:
पुस्तक 1 का शीर्षक PHP - An परिचय है और इसकी कीमत $ 5.95 है।
पुस्तक 2 का शीर्षक PHP है - उन्नत और इसकी कीमत $ 25.00 है।
PHP के SimpleXML लाइब्रेरी के साथ XML का उत्तोलन करना
SimpleXML एक शक्तिशाली पुस्तकालय है जो XML स्ट्रिंग्स को PHP ऑब्जेक्ट का उपयोग करने के लिए आसान में परिवर्तित करता है।
निम्न नीचे के रूप में एक XML संरचना मानता है।
<?xml version="1.0" encoding="UTF-8"?>
<document>
<book>
<bookName>StackOverflow SimpleXML Example</bookName>
<bookAuthor>PHP Programmer</bookAuthor>
</book>
<book>
<bookName>Another SimpleXML Example</bookName>
<bookAuthor>Stack Overflow Community</bookAuthor>
<bookAuthor>PHP Programmer</bookAuthor>
<bookAuthor>FooBar</bookAuthor>
</book>
</document>
SimpleXML के लिए हमारा डेटा पढ़ें
आरंभ करने के लिए, हमें अपने डेटा को SimpleXML में पढ़ने की आवश्यकता है। हम इसे 3 अलग-अलग तरीकों से कर सकते हैं। सबसे पहले, हम अपने डेटा को DOM नोड से लोड कर सकते हैं ।
$xmlElement = simplexml_import_dom($domNode);
हमारा अगला विकल्प हमारे डेटा को XML फ़ाइल से लोड करना है।
$xmlElement = simplexml_load_file($filename);
अंत में, हम अपने डेटा को एक चर से लोड कर सकते हैं ।
$xmlString = '<?xml version="1.0" encoding="UTF-8"?>
<document>
<book>
<bookName>StackOverflow SimpleXML Example</bookName>
<bookAuthor>PHP Programmer</bookAuthor>
</book>
<book>
<bookName>Another SimpleXML Example</bookName>
<bookAuthor>Stack Overflow Community</bookAuthor>
<bookAuthor>PHP Programmer</bookAuthor>
<bookAuthor>FooBar</bookAuthor>
</book>
</document>';
$xmlElement = simplexml_load_string($xmlString);
चाहे आपने DOM एलीमेंट से , फ़ाइल से या स्ट्रिंग से लोड करने के लिए चुना है, अब आप $xmlElement
नामक एक SimpleXMLElement चर के साथ छोड़ $xmlElement
। अब, हम PHP में अपने XML का उपयोग करना शुरू कर सकते हैं।
हमारे SimpleXML डेटा तक पहुँचने
हमारी SimpleXMLElement ऑब्जेक्ट में डेटा तक पहुंचने का सबसे सरल तरीका सीधे गुणों को कॉल करना है । अगर हम अपने पहले बुकनाम, StackOverflow SimpleXML Example
का उपयोग करना चाहते हैं, तो हम इसे नीचे के अनुसार एक्सेस कर सकते हैं।
echo $xmlElement->book->bookName;
इस बिंदु पर, SimpleXML यह मान लेगा कि क्योंकि हमने यह स्पष्ट रूप से नहीं बताया है कि हम कौन सी पुस्तक चाहते हैं, कि हम पहले वाला चाहते हैं। हालाँकि, अगर हम यह तय करते हैं कि हम पहले वाला नहीं चाहते हैं, बल्कि यह कि हम Another SimpleXML Example
चाहते हैं, तो हम इसे नीचे के अनुसार एक्सेस कर सकते हैं।
echo $xmlElement->book[1]->bookName;
यह ध्यान देने योग्य है कि [0]
का उपयोग करना वैसा ही काम करता है जैसा कि इसका उपयोग न करना
$xmlElement->book
के रूप में ही काम करता है
$xmlElement->book[0]
हमारे XML के माध्यम से लूपिंग
ऐसे कई कारण हैं जो आप XML के माध्यम से देख सकते हैं, जैसे कि आपके पास कई आइटम, हमारे मामले में पुस्तकें हैं, जिन्हें हम एक वेबपेज पर प्रदर्शित करना चाहते हैं। इसके लिए, हम SimpleXMLElement के काउंट फंक्शन का लाभ उठाते हुए फॉरच लूप या लूप के लिए एक मानक का उपयोग कर सकते हैं । ।
foreach ( $xmlElement->book as $thisBook ) {
echo $thisBook->bookName
}
या
$count = $xmlElement->count();
for ( $i=0; $i<$count; $i++ ) {
echo $xmlElement->book[$i]->bookName;
}
त्रुटियों को संभालना
अब हम इतने आगे आ गए हैं, यह महसूस करना महत्वपूर्ण है कि हम केवल मनुष्य हैं, और अंततः एक त्रुटि का सामना करेंगे - खासकर यदि हम हर समय विभिन्न XML फ़ाइलों के साथ खेल रहे हैं। और इसलिए, हम उन त्रुटियों को संभालना चाहते हैं।
विचार करें कि हमने एक XML फ़ाइल बनाई। आप देखेंगे कि जबकि यह XML बहुत समान है जो हमारे पास पहले था, इस XML फ़ाइल के साथ समस्या यह है कि अंतिम समापन टैग / दस्तावेज़ के बजाय / दस्तावेज़ है।
<?xml version="1.0" encoding="UTF-8"?>
<document>
<book>
<bookName>StackOverflow SimpleXML Example</bookName>
<bookAuthor>PHP Programmer</bookAuthor>
</book>
<book>
<bookName>Another SimpleXML Example</bookName>
<bookAuthor>Stack Overflow Community</bookAuthor>
<bookAuthor>PHP Programmer</bookAuthor>
<bookAuthor>FooBar</bookAuthor>
</book>
</doc>
अब, कहते हैं, हम इसे अपने PHP में $ फ़ाइल के रूप में लोड करते हैं।
libxml_use_internal_errors(true);
$xmlElement = simplexml_load_file($file);
if ( $xmlElement === false ) {
$errors = libxml_get_errors();
foreach ( $errors as $thisError ) {
switch ( $thisError->level ) {
case LIBXML_ERR_FATAL:
echo "FATAL ERROR: ";
break;
case LIBXML_ERR_ERROR:
echo "Non Fatal Error: ";
break;
case LIBXML_ERR_WARNING:
echo "Warning: ";
break;
}
echo $thisError->code . PHP_EOL .
'Message: ' . $thisError->message . PHP_EOL .
'Line: ' . $thisError->line . PHP_EOL .
'Column: ' . $thisError->column . PHP_EOL .
'File: ' . $thisError->file;
}
libxml_clear_errors();
} else {
echo 'Happy Days';
}
हम निम्नलिखित के साथ स्वागत किया जाएगा
FATAL ERROR: 76
Message: Opening and ending tag mismatch: document line 2 and doc
Line: 13
Column: 10
File: filepath/filename.xml
हालाँकि जैसे ही हम इस समस्या को ठीक करते हैं, हमें "हैप्पी डेज़" के साथ प्रस्तुत किया जाता है।