Zend_Json-xml2json.xml 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20792 -->
  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. <para>
  111. Mais detalhes sobre o recurso xml2json podem ser encontrados na proposta original em si.
  112. Dê uma olhada na <ulink url="http://tinyurl.com/2tfa8z">proposta Zend_xml2json</ulink>.
  113. </para>
  114. </sect1>
  115. <!--
  116. vim:se ts=4 sw=4 et:
  117. -->