Zend_Json-xml2json.xml 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.json.xml2json">
  5. <title>Conversão de XML para JSON</title>
  6. <para>
  7. <classname>Zend_Json</classname> fornece um conveniente método para transformar dados
  8. formatados em <acronym>XML</acronym> para o formato <acronym>JSON</acronym>. Este recurso
  9. foi inspirado em um <ulink
  10. url="http://www.ibm.com/developerworks/xml/library/x-xml2jsonphp/">artigo do
  11. IBM developerWorks</ulink>.
  12. </para>
  13. <para>
  14. <classname>Zend_Json</classname> inclui uma função estática chamada
  15. <methodname>Zend_Json::fromXml()</methodname>. Esta função irá gerar um
  16. <acronym>JSON</acronym> a partir de uma entrada em <acronym>XML</acronym>. Esta função
  17. recebe qualquer string arbitrária em <acronym>XML</acronym> como um parâmetro de entrada.
  18. Tem também um parâmetro de entrada opcional do tipo booleano que instrui a lógica de
  19. conversão para ignorar ou não os atributos <acronym>XML</acronym> durante o processo de
  20. conversão. Se esse parâmetro de entrada opcional não é dado, então o comportamento padrão
  21. é ignorar os atributos <acronym>XML</acronym>. Esta chamada de função é feita como mostrado
  22. abaixo:
  23. </para>
  24. <programlisting language="php"><![CDATA[
  25. // a função fromXml simplesmente recebe uma String contendo conteúdo
  26. // em XML como entrada.
  27. $jsonContents = Zend_Json::fromXml($xmlStringContents, true);
  28. ]]></programlisting>
  29. <para>
  30. A função <methodname>Zend_Json::fromXml()</methodname> faz a conversão da string formata
  31. em <acronym>XML</acronym> do parâmetro de entrada e retorna o equivalente como uma string
  32. formatada em <acronym>JSON</acronym>. No caso de qualquer erro de formatação do
  33. <acronym>XML</acronym> ou erro na lógica de conversão, esta função irá lançar uma exceção.
  34. A lógica de conversão também utiliza técnicas recursivas para percorrer a árvore
  35. <acronym>XML</acronym>. Ele suporta até 25 níveis de profundidade de recursão. Se passar
  36. dessa profundidade, será lançado um <classname>Zend_Json_Exception</classname>. Existem
  37. vários arquivos <acronym>XML</acronym> com vários graus de complexidade fornecidos no
  38. diretório de testes de Zend Framework. Eles podem ser usados para testar a
  39. funcionalidade do recurso xml2json.
  40. </para>
  41. <para>
  42. O simples exemplo a seguir mostra uma string <acronym>XML</acronym> passada como entrada e
  43. uma string <acronym>JSON</acronym> de saída retornada como resultado da função
  44. <methodname>Zend_Json::fromXml()</methodname>. Este exemplo usa o parâmetro opcional da
  45. função para não ignorar os atributos <acronym>XML</acronym> durante a conversão.
  46. Consequentemente, você pode notar que a string <acronym>JSON</acronym> resultante inclui
  47. uma representação dos atributos <acronym>XML</acronym> presentes na string
  48. <acronym>XML</acronym> de entrada.
  49. </para>
  50. <para>
  51. String <acronym>XML</acronym> passada como entrada para a função
  52. <methodname>Zend_Json::fromXml()</methodname>:
  53. </para>
  54. <programlisting language="php"><![CDATA[
  55. <?xml version="1.0" encoding="UTF-8"?>
  56. <books>
  57. <book id="1">
  58. <title>Code Generation in Action</title>
  59. <author><first>Jack</first><last>Herrington</last></author>
  60. <publisher>Manning</publisher>
  61. </book>
  62. <book id="2">
  63. <title>PHP Hacks</title>
  64. <author><first>Jack</first><last>Herrington</last></author>
  65. <publisher>O'Reilly</publisher>
  66. </book>
  67. <book id="3">
  68. <title>Podcasting Hacks</title>
  69. <author><first>Jack</first><last>Herrington</last></author>
  70. <publisher>O'Reilly</publisher>
  71. </book>
  72. </books>
  73. ]]></programlisting>
  74. <para>
  75. String <acronym>JSON</acronym> de saída retornada da função
  76. <methodname>Zend_Json::fromXml()</methodname>:
  77. </para>
  78. <programlisting language="php"><![CDATA[
  79. {
  80. "books" : {
  81. "book" : [ {
  82. "@attributes" : {
  83. "id" : "1"
  84. },
  85. "title" : "Code Generation in Action",
  86. "author" : {
  87. "first" : "Jack", "last" : "Herrington"
  88. },
  89. "publisher" : "Manning"
  90. }, {
  91. "@attributes" : {
  92. "id" : "2"
  93. },
  94. "title" : "PHP Hacks", "author" : {
  95. "first" : "Jack", "last" : "Herrington"
  96. },
  97. "publisher" : "O'Reilly"
  98. }, {
  99. "@attributes" : {
  100. "id" : "3"
  101. },
  102. "title" : "Podcasting Hacks", "author" : {
  103. "first" : "Jack", "last" : "Herrington"
  104. },
  105. "publisher" : "O'Reilly"
  106. }
  107. ]}
  108. }
  109. ]]></programlisting>
  110. <sect2 id="zend.json.xml2json.changes">
  111. <title>Changes</title>
  112. <sect3 id="zend.json.xml2json.changes.1-11-6">
  113. <title>Changes in 1.11.6</title>
  114. <para>
  115. Starting from the release 1.11.6 the <methodname>Zend_Json::fromXml()</methodname> function
  116. has been rewritten from scratch in order to manage XML element with attributes, text value
  117. and sub-elements (see the <ulink url="http://framework.zend.com/issues/browse/ZF-3257">ZF-3257</ulink>).
  118. </para>
  119. <para>
  120. For instance, if you have an XML document like this:
  121. </para>
  122. <programlisting language="php"><![CDATA[
  123. <?xml version="1.0" encoding="UTF-8"?>
  124. <a>
  125. <b id="foo"/>
  126. bar
  127. </a>
  128. ]]></programlisting>
  129. <para>
  130. The <acronym>JSON</acronym> output string returned from
  131. <methodname>Zend_Json::fromXml()</methodname> is:
  132. </para>
  133. <programlisting language="php"><![CDATA[
  134. {
  135. "a" : {
  136. "b" : {
  137. "@attributes" : {
  138. "id" : "foo"
  139. }
  140. },
  141. "@text" : "bar"
  142. }
  143. }
  144. ]]></programlisting>
  145. <para>
  146. The idea is to use a special key value (@text) to store the text value of an XML element,
  147. only if this element contains attributes or sub-elements (as in the previous examples).
  148. If you have a simple XML element with only a text value, like this:
  149. </para>
  150. <programlisting language="php"><![CDATA[
  151. <?xml version="1.0" encoding="UTF-8"?>
  152. <a>foo</a>
  153. ]]></programlisting>
  154. <para>
  155. the JSON will be {"a":"foo"} that is quite intuitive, instead of {"a":{"@text":"foo"}}.
  156. </para>
  157. </sect3>
  158. </sect2>
  159. </sect1>
  160. <!--
  161. vim:se ts=4 sw=4 et:
  162. -->