convertir datos xml a matriz en cakephp

Estoy usando el componente XML de la función predefinida de cakephp. Lo que quiero hacer es convertir los datos del archivo xml en una matriz para fines de procesamiento. para esto mi código es como:

App::import('Helper', 'Xml');
$xml = new XmlHelper();
$xml_data = & new XML($filePath);
$array = Set::reverse($xml_data);

Este código funciona perfectamente si mi archivo xml contiene datos en formato:

<parent>
  <tag ...../>
  <tag ...../>
</parent>

donde está el nodo raíz.

es decir, todas las etiquetas están dentro de una única etiqueta principal.

Pero el problema ocurre cuando los datos se distribuyen en varias etiquetas principales diferentes es decir:

<parent>
  <tag ...../>
</parent>
<parent>
  <tag ...../>
</parent>

En este caso, solo los datos de la primera etiqueta principal se proporcionan en la matriz de salida. Sé que un archivo xml debe tener solo 1 nodo raíz, pero el problema es que, mientras leo un archivo xml, a veces obtengo archivos con varios nodos raíz. Lo que solo quiero saber es si hay alguna forma de leer un archivo xml con múltiples nodos raíz.

¿Es esta otra forma en la que puedo leer varias etiquetas principales en un archivo xml?

preguntado el 04 de julio de 12 a las 08:07

¿Por qué se votó esto negativamente? Es una pregunta legítima incluso si carece de un poco de información que pueda ayudar. Votantes negativos, al menos explique por qué está votando negativamente para que la persona que hace la pregunta pueda, al menos en teoría, aprender algo de la experiencia. -

@HelgiHrafnGunnarsson: gracias. -

1 Respuestas

¿Están esos elementos principales en la raíz del documento XML? Eso es importante porque XML solo permite un nodo raíz. Debajo del nodo raíz, puede tener tantos elementos como desee. De su pregunta no queda claro si el Los s son nodos raíz o subnodos del nodo raíz.

Pero lo que está tratando de hacer también puede ser una mala idea a menos que pueda estar seguro de que los archivos XML seguirán siendo muy pequeños para siempre. Las matrices grandes y profundas en PHP pueden volverse bastante lentas rápidamente. Permítanme sugerir aprender XPath en su lugar, que es una especie de "sublenguaje" para buscar cosas en un documento XML. El procesamiento de XML en general tiende a ser algo lento y pesado, pero las matrices de PHP grandes y profundas pueden volverse extremadamente lentas, sin importar cómo las maneje.

¡Espero eso ayude!

Respondido 04 Jul 12, 11:07

No conozco ninguna herramienta que le permita leer múltiples nodos raíz. - Si está obteniendo archivos XML con múltiples nodos raíz, son esencialmente defectuosos. La forma correcta de manejar eso sería notificar a quienes le dan esos archivos XML, diciéndoles que deben ser XML válidos. La única solución alternativa que se me ocurre es dividirlos manualmente con alguna utilidad personalizada y luego leer varios archivos. Pero realmente deberían ser XML válidos para empezar. - Teekin

También tenga en cuenta que INCLUSO SI hace que esto funcione en este caso, entonces la mayoría de los otros analizadores XML fallarán con múltiples nodos raíz. Eso anula el propósito de usar XML en primer lugar. No puedo enfatizar esto lo suficiente; aquellos que te dieron esos archivos deberían tener la responsabilidad de darte un XML válido. - Teekin

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.