<?xml version="1.0" encoding="UTF-8"?>
    <!-- EN-Revision: 20792 -->
    <!-- Reviewed: no -->
<sect1 id="zend.json.xml2json">
    <title>Conversión de XML a JSON</title>
    <para>
        <classname>Zend_Json</classname>
        roporciona una método conveniente para
        transformar datos en formato
        <acronym>XML</acronym>
        a formato
        <acronym>JSON</acronym>
        . Esta
        característica fue inspirado en un
        <ulink url="http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/">
            artículo de IBM developerWorks</ulink>
        .
    </para>

    <para>
        <classname>Zend_Json</classname>
        incluye una función estática llamada
        <methodname>Zend_Json::fromXml()</methodname>
        . Esta función generará
        <acronym>JSON</acronym>
        desde una determinada entrada
        <acronym>XML</acronym>
        . Esta función
        toma cualquier string
        <acronym>XML</acronym>
        arbitrario como un
        parámetro de entrada. También puede tomar opcionalmente parámetros
        booleanos de entrada que instruyan a la lógica de conversión de ignorar
        o no los atributos
        <acronym>XML</acronym>
        durante el proceso de
        conversión. Si este parámetro opcional de entrada no está dado,
        entonces
        el comportamiento por defecto es ignorar los atributos
        <acronym>XML</acronym>
        . La llamada a esta función se hace como se
        muestra a continuación:
    </para>
    <programlisting language="php"><![CDATA[
// la función fromXml simplemente toma un string conteniendo XML
// como entrada.
$jsonContents = Zend_Json::fromXml($xmlStringContents, true);
]]></programlisting>

    <para>
        <methodname>Zend_Json::fromXml()</methodname>
        función que hace la
        conversión del parámetro de entrada formateado como un string
        <acronym>XML</acronym>
        y devuelve el string de salida equivalente
        formateado a
        <acronym>JSON</acronym>
        . En caso de cualquier entrada con formato
        <acronym>XML</acronym>
        erróneo o un error en la lógica de
        conversión, esta función arrojará una excepción. La
        conversión lógica
        también usa técnicas recursivas para recorrer el árbol
        <acronym>XML</acronym>
        . Soporta una recursión de hasta 25 niveles de
        profundidad. Más allá de esa profundidad,
        arrojará una
        <classname>Zend_Json_Exception</classname>
        . Hay varios archivos
        <acronym>XML</acronym>
        con diversos grados de complejidad provistas
        en el directorio de tests de Zend Framework. Se
        pueden utilizar para
        probar la funcionalidad de la característica xml2json.
    </para>

    <para>
        El siguiente es un ejemplo simple que muestra tanto el string de
        entrada
        <acronym>XML</acronym>
        pasado a y al string
        <acronym>JSON</acronym>
        de salida
        devuelto como resultado de la función
        <methodname>Zend_Json::fromXml()</methodname>
        . Este ejemplo utilizó el
        parámetro de la función opcional como para no ignorar los atributos
        <acronym>XML</acronym>
        durante la conversión. Por lo tanto, puede
        notar que el string resultante
        <acronym>JSON</acronym>
        incluye una representación de los
        atributos
        <acronym>XML</acronym>
        presentes en el string de entrada
        <acronym>XML</acronym>
        .
    </para>

    <para>
        String de entrada XML pasada a la función
        <methodname>Zend_Json::fromXml()</methodname>
        :
    </para>

    <programlisting language="php"><![CDATA[
<?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>
]]></programlisting>

    <para>
        String de salida
        <acronym>JSON</acronym>
        devuelto por la función
        <methodname>Zend_Json::fromXml()</methodname>
        :
    </para>

    <programlisting language="php"><![CDATA[
{
   "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"
      }
   ]}
}
]]></programlisting>

    <para>
        Más detalles sobre esta característica xml2json pueden encontrarse en
        la propuesta original.
        Eche un vistazo a la
        <ulink url="http://tinyurl.com/2tfa8z">Zend_xml2json proposal</ulink>
        .
    </para>

</sect1>
