¿Cuál es la diferencia entre las diferentes bibliotecas de análisis XML en PHP5?

StackOverflow https://stackoverflow.com/questions/246819

  •  05-07-2019
  •  | 
  •  

Pregunta

La pregunta original está abajo, pero cambié el título porque creo que será más fácil encontrar a otros con la misma duda. Al final, un documento XHTML es un documento XML.

Es una pregunta para principiantes, pero me gustaría saber cuál crees que es la mejor biblioteca para analizar documentos XHTML en PHP5.

He generado el XHTML a partir de archivos HTML (que se crearon utilizando Word: S) con Tidy, y sé que necesito reemplazar algunos elementos de ellos (como el elemento y, reemplazar algunos atributos en

etiquetas).

No he usado mucho XML, parece que hay muchas opciones para analizar en PHP (XML simple, DOM, etc.) y no sé si todas ellas pueden hacer lo que necesito, y es la más fácil de usar.

Lo siento por mi inglés, soy de Argentina. Gracias!

Brindo más información: Tengo muchas páginas HTML, hechas en Word 97. Usé Tidy para limpiarlas y convertirlas en XHTML Strict, por lo que ahora todas son compatibles con XML. Quiero usar un analizador XML para encontrar algunos elementos y reemplazarlos (la lógica por la cual hago esto no importa). Por ejemplo, quiero que todas las páginas utilicen la misma hoja de estilos CSS y atributos de clase, para una apariencia unificada. Todas son páginas estáticas que contienen documentos legales, no hay nada extraño allí. ¿Cuál de las extensiones debo usar? ¿Es suficiente SimpleXML? ¿Debo aprender DOM a pesar de ser más difícil?

¿Fue útil?

Solución

Sólo para aclarar la confusión aquí. PHP tiene varias bibliotecas XML, porque php4 no tenía muy buenas opciones en esa dirección. Desde PHP5, puede elegir entre SimpleXml , DOM y el analizador basado en saxos . Este último también existió en php4. php4 también tenía una extensión DOM, que no es la misma que la de php5.

DOM y SimpleXml son alternativas al mismo dominio de problema; Llevan el documento a la memoria y le permiten acceder a él como una estructura de árbol. DOM es una api bastante voluminosa, pero también es muy consistente y está implementada en muchos idiomas, lo que significa que puede reutilizar su conocimiento en otros idiomas (por ejemplo, en Javascript). SimpleXml puede ser más fácil inicialmente.

El analizador de SAX es una bestia diferente. Se trata un documento XML como una secuencia de etiquetas. Esto es útil si está tratando con documentos muy grandes, ya que no necesita tener todo en la memoria.

Para su uso, probablemente usaría la API DOM.

Otros consejos

Puede usar SimpleXML , que se incluye en una instalación predeterminada de PHP. Estas extensiones ofrecen un fácil acceso orientado a objetos a estructuras XML.

También hay DOM XML . Un " lado negativo " para esta extensión es que es un poco más difícil de usar y que no está incluido de forma predeterminada.

  • DOM es una API estándar, independiente del idioma, para datos jerárquicos, como XML, que ha sido estandarizado por el W3C. Es una API rica con mucha funcionalidad. Se basa en objetos, ya que cada nodo es un objeto.

    DOM es bueno cuando no solo quiere leer, o escribir, sino que también quiere hacer mucha manipulación de nodos en un documento existente, como insertar nodos entre otros, cambiar la estructura, etc.

  • SimpleXML es una API específica de PHP que también se basa en objetos, pero pretende ser mucho menos "concisa" que el DOM: tareas simples como encontrar el valor de un El nodo o la búsqueda de sus elementos hijos toman mucho menos código. Su API no es tan rica como DOM, pero aún incluye características como las búsquedas de XPath y una capacidad básica para trabajar con documentos de múltiples espacios de nombres. Y, lo que es más importante, aún conserva todas las características de su documento, como las secciones y comentarios de CDATA XML, aunque no incluye funciones para manipularlos.

    SimpleXML es muy bueno para solo lectura: si todo lo que quieres hacer es leer el documento XML y convertirlo a otro formulario, te ahorrará mucho código. También es bastante bueno cuando desea generar un documento, o realizar manipulaciones básicas como agregar o cambiar elementos o atributos secundarios, pero puede ser complicado (pero no imposible) hacer mucha manipulación de documentos existentes. No es fácil, por ejemplo, agregar un elemento secundario entre otros dos; addChild solo inserta después de otros elementos. SimpleXML tampoco puede hacer transformaciones XSLT. No tiene cosas como 'getElementsByTagName' o getElementById ', pero si sabes XPath, aún puedes hacer ese tipo de cosas con SimpleXML.

    El objeto SimpleXMLElement es algo 'mágico'. Las propiedades que expone si var_dump / printr / var_export no corresponden a su representación interna completa. Expone algunos de sus elementos secundarios como si fueran propiedades a las que se puede acceder con - > operador, pero aún conserva el documento completo internamente, y puede hacer cosas como acceder a un elemento secundario cuyo nombre es una palabra reservada con el operador [] como si fuera una matriz asociativa.

No tiene que comprometerse completamente con uno u otro, porque PHP implementa las funciones:

  • simplexml_import_dom (DOMNode)
  • dom_import_simplexml (SimpleXMLElement)

Esto es útil si está utilizando SimpleXML y necesita trabajar con el código que espera un nodo DOM o viceversa.

PHP también ofrece una tercera biblioteca XML:

  • XML Parser (una implementación de SAX , una interfaz independiente del idioma, pero no mencionada por ese nombre en el manual) es un nivel mucho más bajo biblioteca, que sirve para un propósito muy diferente. No construye objetos para ti. Básicamente, hace que sea más fácil escribir su propio analizador XML, ya que hace el trabajo de avanzar al siguiente token y descubrir el tipo de token, como el nombre de la etiqueta y si es una etiqueta de apertura o cierre, para usted . Luego, debe escribir devoluciones de llamada que deben ejecutarse cada vez que se encuentra un token. Todas las tareas, como representar el documento como objetos / matrices en un árbol, manipular el documento, etc., deberán implementarse por separado, ya que todo lo que puede hacer con el analizador XML es escribir un analizador de bajo nivel.

    Las funciones del analizador XML siguen siendo bastante útiles si tiene requisitos específicos de memoria o velocidad. Con él, es posible escribir un analizador que pueda analizar un documento XML muy largo sin tener todos sus contenidos en la memoria a la vez. Además, si no está interesado en todos los datos y no necesita o no quiere que se coloquen en un árbol o conjunto de objetos PHP, puede ser más rápido. Por ejemplo, si desea escanear un documento XHTML y encontrar todos los enlaces, y no le importa la estructura.

Prefiero SimpleXMLElement ya que es bastante fácil de usar para cortar a través de elementos.

Editar: No dice que haya información de versión disponible, pero está disponible en PHP5, al menos 5.2.5 pero probablemente antes.

Sin embargo, es una elección muy personal, hay un montón de extensiones XML .

Tenga en cuenta que muchos analizadores XML rechazarán si tiene un marcado no válido. ¡XHTML debe ser XML, pero no siempre!

Ha pasado mucho tiempo (2 años o más) desde que trabajé con el análisis de XML en PHP, pero siempre tuve resultados buenos y utilizables de XML_Parser Pear package . Dicho esto, he tenido una exposición mínima a PHP5, por lo que no sé realmente si hay alternativas mejores y mejor incorporadas en estos días.

Hice un poco de análisis de XML en PHP5 el año pasado y decidí usar una combinación de SimpleXML.

DOM es un poco más útil si desea crear un nuevo árbol XML o agregarlo a uno existente, es un poco más flexible.

Realmente depende de lo que estés tratando de lograr. Para obtener cantidades bastante grandes de datos, I.E muchos registros de, por ejemplo, información del producto de un sitio web de una tienda, probablemente usaría Expat, ya que supuestamente es un poco más rápido ... Personalmente, tengo XML lo suficientemente grande como para crear un aumento de rendimiento notable. En esas cantidades también podría estar usando SQL.

Recomiendo usar SimpleXML. Es bastante intuitivo, fácil de usar / escribir. Además, funciona muy bien con XPath.

Realmente nunca pude usar mucho DOM, pero si estás usando el Analizador XML para algo tan grande como lo estás describiendo, es posible que desees usarlo, ya que es un poco más funcional que SimpleXML.

Puedes leer sobre los tres en las Escuelas del W3C:

http://www.w3schools.com/php/php_xml_parser_expat.asp

http://www.w3schools.com/php/php_xml_simplexml.asp

http://www.w3schools.com/php/php_xml_dom.asp

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top