Package Home

Zend Framework 2 Documentation (Manual)

PHK Home

File: /_sources/modules/zend.json.xml2json.txt

Size:4087
Storage flags:no_autoload,compress/gzip (34%)

.. _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.

.. _zend.json.xml2json.example:

Example
-------

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:

   <?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>

*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

For more information about the PHK package format: http://phk.tekwire.net