On this page
XML to JSON conversion
laminas-xml2json provides a convenience method for transforming XML formatted data into JSON format. This feature was inspired from an IBM developerWorks article.
laminas-xml2json provides the static method Laminas\Xml2Json\Xml2Json::fromXml()
.
This method will generate JSON from a given XML input. This method takes any
arbitrary XML string as an input parameter, and optionally a boolean parameter
to instruct the conversion logic as to whether or not to ignore XML attributes
during the conversion process. If the optional flag for converting attributes is
not provided, then the default behavior is to ignore the XML attributes.
A basic example follows:
$jsonContents = Laminas\Xml2Json\Xml2Json::fromXml($xmlStringContents, true);
Laminas\Xml2Json\Xml2Json::fromXml()
converts the XML formatted string input
parameter and returns the equivalent JSON formatted string output. In case of an
XML input format error or conversion logic error, it raises an exception.
The conversion logic uses recursive techniques to traverse the XML tree,
supporting up to 25 levels deep. Beyond that depth, it raises a
Laminas\Xml2Json\Exception\RecursionException
.
Example
The following example demonstrates both the XML input string passed to and the JSON
output string returned from Laminas\Xml2Json\Xml2Json::fromXml()
. This example
passes a boolean false to the second argument in order to receive a
representation of the XML attributes in the returned JSON.
First, let's look at the XML:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="1">
<title>Code Generation in Action</title>
<author><first>Jack</first><last>Herrington</last></author>
<publisher>Manning</publisher>
</book>
<book id="2">
<title>PHP Hacks</title>
<author><first>Jack</first><last>Herrington</last></author>
<publisher>O'Reilly</publisher>
</book>
<book id="3">
<title>Podcasting Hacks</title>
<author><first>Jack</first><last>Herrington</last></author>
<publisher>O'Reilly</publisher>
</book>
</books>
Assuming that the above is captured in the variable $xml
, we'll now pass it to
the following code:
// Passing the second parameter to ensure we get attributes as well.
$json = Laminas\Xml2Json\Xml2Json::fromXml($xml, false);
This results in the following JSON:
{
"books" : {
"book" : [ {
"@attributes" : {
"id" : "1"
},
"title" : "Code Generation in Action",
"author" : {
"first" : "Jack", "last" : "Herrington"
},
"publisher" : "Manning"
}, {
"@attributes" : {
"id" : "2"
},
"title" : "PHP Hacks", "author" : {
"first" : "Jack", "last" : "Herrington"
},
"publisher" : "O'Reilly"
}, {
"@attributes" : {
"id" : "3"
},
"title" : "Podcasting Hacks", "author" : {
"first" : "Jack", "last" : "Herrington"
},
"publisher" : "O'Reilly"
}
]}
}