.. _zend.json.xml2json: XML to JSON conversion ====================== ``Zend\Json`` provides a convenience method for transforming *XML* formatted data into *JSON* format. This feature was inspired from an `IBM developerWorks article`_. ``Zend\Json`` includes a static function called ``Zend\Json\Json::fromXml()``. This function will generate *JSON* from a given *XML* input. This function takes any arbitrary *XML* string as an input parameter. It also takes an optional boolean input parameter to instruct the conversion logic to ignore or not ignore the *XML* attributes during the conversion process. If this optional input parameter is not given, then the default behavior is to ignore the *XML* attributes. This function call is made as shown below: .. code-block:: php :linenos: // fromXml function simply takes a String containing XML contents // as input. $jsonContents = Zend\Json\Json::fromXml($xmlStringContents, true); ``Zend\Json\Json::fromXml()`` function does the conversion of the *XML* formatted string input parameter and returns the equivalent *JSON* formatted string output. In case of any *XML* input format error or conversion logic error, this function will throw an exception. The conversion logic also uses recursive techniques to traverse the *XML* tree. It supports recursion upto 25 levels deep. Beyond that depth, it will throw a ``Zend\Json\Exception``. There are several *XML* files with varying degree of complexity provided in the tests directory of Zend Framework. They can be used to test the functionality of the xml2json feature. The following is a simple example that shows both the *XML* input string passed to and the *JSON* output string returned as a result from the ``Zend\Json\Json::fromXml()`` function. This example used the optional function parameter as not to ignore the *XML* attributes during the conversion. Hence, you can notice that the resulting *JSON* string includes a representation of the *XML* attributes present in the *XML* input string. *XML* input string passed to ``Zend\Json\Json::fromXml()`` function: .. code-block:: php :linenos: Code Generation in Action JackHerrington Manning PHP Hacks JackHerrington O'Reilly Podcasting Hacks JackHerrington O'Reilly *JSON* output string returned from ``Zend\Json\Json::fromXml()`` function: .. code-block:: php :linenos: { "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" } ]} } More details about this xml2json feature can be found in the original proposal itself. Take a look at the `Zend_xml2json proposal`_. .. _`IBM developerWorks article`: http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/ .. _`Zend_xml2json proposal`: http://framework.zend.com/wiki/display/ZFPROP/Zend_xml2json+-+Senthil+Nathan