Tools, FAQ, Tutorials:
Convert XML to JSON with PHP
How to convert an XML document to a JSON text string with PHP language?
✍: FYIcenter.com
Currently, there is no built-in function or any standard extension
that you can use to convert an XML document to a JSON text string.
But you can use the following PHP example, xml_to_json_converter.php, to convert an XML document to a JSON text string:
<?php
# xml_to_json_converter.php
# Copyright (c) FYIcenter.com
$dom = new DOMDocument('1.0');
$dom->preserveWhiteSpace = false;
$dom->load($argv[1]) or die("Unable to open json file!");
$root = $dom->documentElement;
$tag = $root->tagName;
$obj = new stdClass();
$obj->{$tag} = buildJSON($root);
print(json_encode($obj,JSON_PRETTY_PRINT));
function buildJSON($element) {
$val = null;
$att = buildAttributes($element);
$txt = buildText($element);
$sub = buildElements($element);
if ($att!=null) {
if ($val==null) $val = new stdClass();
foreach ($att as $k => $v) {
$val->{$k} = $v;
}
}
if ($sub!=null) {
if ($val==null) $val = new stdClass();
foreach ($sub as $k => $v) {
$val->{$k} = $v;
}
}
if ($txt!=null) {
if (($val==null) && is_scalar($txt)) {
$val = $txt;
} else {
if ($val==null) $val = new stdClass();
$val->{"#text"} = $txt;
}
}
return $val;
}
function buildAttributes($element) {
$val = null;
if ($element->hasAttributes()) {
$val = new stdClass();
foreach ($element->attributes as $att) {
$v = $att->value;
if ($v=="") $v = null;
$val->{"@".$att->name} = $v;
}
}
return $val;
}
function buildText($element) {
$arr = array();
if ($element->hasChildNodes()) {
foreach ($element->childNodes as $node) {
if ($node->nodeType==XML_TEXT_NODE || $node->nodeType==XML_CDATA_SECTION_NODE) {
array_push($arr,$node->nodeValue);
}
}
}
if (count($arr)==1) return $arr[0];
else if (count($arr)>1) return $arr;
else return null;
}
function buildElements($element) {
$val = new stdClass();
if ($element->hasChildNodes()) {
foreach ($element->childNodes as $node) {
if ($node->nodeType==XML_ELEMENT_NODE) {
if (!property_exists($val,$node->nodeName)) {
$val->{$node->nodeName} = buildJSON($node);
} else {
$cur = $val->{$node->nodeName};
if (is_array($cur)) {
array_push($cur,buildJSON($node));
} else {
$val->{$node->nodeName} = array($cur,buildJSON($node));
}
}
}
}
}
if (count((array)$val)>0) return $val;
else return null;
}
?>
To try the above PHP example, you can enter the following XML file, xml_sample.xml:
<profile id="10001">
<name>John<mid>M</mid>Smith</name>
<age>25</age>
<address>
<street>21 2nd Street</street>
<city>New York</city>
</address>
<phone type="home">212 555-1234</phone>
<phone type="office">646 555-4567</phone>
<children/>
</profile>
Then run the above PHP example through the PHP engine with the XML file provided in the command line:
>\fyicenter\php\php.exe xml_to_json_converter.php xml_sample.xml
{
"profile": {
"@id": "10001",
"name": {
"mid": "M",
"#text": [
"John",
"Smith"
]
},
"age": "25",
"address": {
"street": "21 2nd Street",
"city": "New York"
},
"phone": [
{
"@type": "home",
"#text": "212 555-1234"
},
{
"@type": "office",
"#text": "646 555-4567"
}
],
"children": null
}
}
⇒ XML to JSON Conversion at fyicenter.com
2017-08-17, ∼2793🔥, 0💬
Popular Posts:
What is EPUB 3.0 Metadata "dc:publisher" and "dc:rights" elements? EPUB 3.0 Metadata "dc:publisher" ...
How to use the "Ctrl-p Ctrl-q" sequence to detach console from the TTY terminal of container's runni...
How To Open Standard Output as a File Handle in PHP? If you want to open the standard output as a fi...
How to add request body examples to my Azure API operation to make it more user friendly? If you hav...
How to access Query String parameters from "context.Request.Url.Que ry"object in Azure API Policy? Q...