← Back to PHP Course | Chapter 15: Web Development | Lesson 11 of 12

PHP AJAX XML

जबकि JSON modern AJAX पर dominate करता है, कुछ systems -- खासकर पुराने APIs या legacy XML-based services के साथ integrate करने वाले -- अभी भी AJAX responses XML format में उम्मीद करते हैं। PHP पहले covered same SimpleXML और DOM tools इस्तेमाल करके एक AJAX endpoint से XML बना और return कर सकता है, बस एक XML-appropriate content type के साथ।
Syntax
php
header("Content-Type: text/xml");
$dom = new DOMDocument();
$root = $dom->createElement("root_name", "text");
$dom->appendChild($root);
echo $dom->saveXML();

एक PHP Endpoint से XML Return करना

एक AJAX endpoint JSON के बजाय एक XML document बना और return कर सकता है, इसे safely construct करने के लिए DOMDocument (DOM Parser topic में covered) इस्तेमाल करके, फिर इसे उपयुक्त text/xml content type header के साथ output करते हुए।

उदाहरण: Returning XML from a PHP Endpoint

php
<?php
// Call `header("Content-Type: text/xml")`
header("Content-Type: text/xml");
// Create a new `DOMDocument` instance, stored in `$dom`
$dom = new DOMDocument();
// Declare `$root`, set to `$dom->createElement("response", "success")`
$root = $dom->createElement("response", "success");
$dom->appendChild($root);
// Print `$dom->saveXML()` to the output
echo $dom->saveXML();
?>

JavaScript में एक XML AJAX Response Parse करना

browser का built-in DOMParser एक raw XML response string को एक navigable document में parse कर सकता है, PHP के अपने DOM extension जैसे similar तरीके से -- response.text() raw XML text retrieve करता है, और new DOMParser().parseFromString() इसे एक queryable document में convert करता है।

उदाहरण: Parsing an XML AJAX Response in JavaScript

php
<?php
// JS: new DOMParser().parseFromString(await response.text(), "text/xml")
header("Content-Type: text/xml");
echo "<response>ok</response>";
?>

Database Data से एक XML Response बनाना

किसी database query को XML output के साथ combine करना JSON case जैसा ही pattern follow करता है -- rows fetch करें, फिर DOMDocument इस्तेमाल करके हर एक के लिए एक XML element बनाएँ, हर row को response document के एक child element की तरह append करते हुए।

उदाहरण: Building an XML Response from Database Data

php
<?php
// Create a new `SQLite3` instance with ':memory:', stored in `$db`
$db = new SQLite3(':memory:');
$db->exec("CREATE TABLE products (name TEXT)");
$db->exec("INSERT INTO products VALUES ('Book')");
// Create a new `DOMDocument` instance, stored in `$dom`
$dom = new DOMDocument();
// Declare `$root`, set to `$dom->createElement("products")`
$root = $dom->createElement("products");
// Declare `$result`, set to `$db->query("SELECT * FROM products")`
$result = $db->query("SELECT * FROM products");
// Keep looping while `$row = $result->fetchArray(SQLITE3_ASSOC)` holds
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
    // Declare `$item`, set to `$dom->createElement("product", $row['name'])`
    $item = $dom->createElement("product", $row['name']);
    $root->appendChild($item);
}
$dom->appendChild($root);
// Print `$dom->saveXML()` to the output
echo $dom->saveXML();
?>

एक नए Endpoint के लिए XML और JSON में चुनना

बिना किसी मौजूदा constraint वाले बिल्कुल नए AJAX endpoint के लिए, JSON लगभग हमेशा simpler, ज़्यादा efficient choice है -- XML तक तभी जाएँ जब आप किसी ऐसे system के साथ integrate कर रहे हों जो पहले से XML उम्मीद करे या produce करे, default starting point की तरह नहीं।

उदाहरण: Choosing Between XML and JSON for a New Endpoint

php
<?php
// Print "Use JSON by default; XML only when integrating with a system that already expects it" to the output
echo "Use JSON by default; XML only when integrating with a system that already expects it";
?>

एक XML Response Structure Validate करना

किसी AJAX endpoint के XML response को reliable मानने से पहले, यह confirm करना उचित है कि DOMDocument actually valid, well-formed XML produce करता है -- एक sanity check की तरह saveXML() output पर loadXML() call करना, या सीधे endpoint के URL के against test करके raw response inspect करना।

उदाहरण: Validating an XML Response Structure

php
<?php
// Create a new `DOMDocument` instance, stored in `$dom`
$dom = new DOMDocument();
// Declare `$root`, set to `$dom->createElement("response", "ok")`
$root = $dom->createElement("response", "ok");
$dom->appendChild($root);
// Declare `$xmlString`, set to `$dom->saveXML()`
$xmlString = $dom->saveXML();
// Create a new `DOMDocument` instance, stored in `$check`
$check = new DOMDocument();
// Declare `$isValid`, set to `$check->loadXML($xmlString)`
$isValid = $check->loadXML($xmlString);
// Print `$isValid ? "Well-formed XML" : "Invalid XML"` to the output
echo $isValid ? "Well-formed XML" : "Invalid XML";
?>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. Content-Type: text/xml (या application/xml) response header set करना भूल जाना, जो browser या JavaScript XML parser को response misinterpret करवा सकता है।
  2. manually variable values के आसपास XML tags को strings की तरह concatenate करना, malformed XML का risk लेते हुए अगर किसी value में < या & जैसा character हो जिसे escaping चाहिए।
  3. same project के अलग-अलग endpoints में XML और JSON response formats को inconsistently mix करना, JavaScript को हर एक अलग तरह से handle करने पर मजबूर करते हुए।
चैप्टर सारांश
  • XML return करने वाले एक AJAX endpoint को Content-Type: text/xml header set करना चाहिए ताकि client response सही से interpret करे।
  • XML response programmatically बनाने के लिए DOMDocument या SimpleXML इस्तेमाल किया जाना चाहिए, tag strings को manually concatenate करने के बजाय।
  • JavaScript का fetch API response.text() और फिर DOMParser API से एक XML response retrieve और parse कर सकता है।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.