Forum und email

Funciones DOM XML

Introducción

La extensión DOM XML ha sido re-estructurada en PHP 4.3.0 para mayor compatibilidad con el estándar DOM. La extensión aun contiene varias funciones viejas, pero ellas ya no deben ser usadas. En particular, las funciones que no son orientadas a objetos deben evitarse.

La extensión le permite operar sobre un documento XML con la API DOM. También ofrece una función domxml_xmltree() para convertir el documento XML completo en un árbol de objetos PHP. Actualmente, este árbol debe ser considerado como de sólo-escritura - es posible modificarlo, pero tal cosa no tendría sentido ya que DomDocument_dump_mem() no puede aplicarse sobre él. Por lo tanto, si desea leer un archivo XML y escribir una versión modificada, use DomDocument_create_element(), DomDocument_create_text_node(), set_attribute(), etc. y finalmente la función DomDocument_dump_mem().

Note: This extension has been moved to the » PECL repository and is no longer bundled with PHP as of PHP 5.0.0.

Note: Si necesita soporte DOM XML con PHP 5, puede usar la extensión DOM. La presente extensión, domxml, no es compatible con la extensión DOM.

Requisitos

Esta extensión hace uso de la » biblioteca GNOME XML. Descargue e instale esta biblioteca. Necesita por lo menos libxml-2.4.14. Para usar las características DOM XSLT, puede usar la » biblioteca libxslt y las adiciones EXSLT de » https://www.exslt.org/. Descargue e instale estas bibliotecas si planea usar las características XSLT (y las mejoras). Necesita por lo menos libxslt-1.0.18.

Instalación

Esta extension » PECL no esta ligada a PHP. Mas informacion sobre nuevos lanzamientos, descargas ficheros de fuentes, informacion sobre los responsables asi como un 'CHANGELOG', se puede encontrar aqui: » https://pecl.php.net/package/domxml.

En PHP 4 la fuente de las extensiones PECL pueden encontrarse en el directorio ext/ que se existe en las fuentes de PHP o en el enlace PECL de arriba. Esta extensión se encuentra disponible únicamente si PHP fue configurado con --with-dom[=DIR]. Agregue --with-dom-xslt[=DIR] para incluir soporte para DOM XSLT. DIR es el directorio de instalación de libxslt. Agregue --with-dom-exslt[=DIR] para incluir soporte para DOM EXSLT, en donde DIR es el directorio de instalación de libexslt.

Los usuarios de windows deben habilitar php_domxml.dll al interior de php.ini para usar estas funciones. En PHP 4, esta DLL se encuentra en el directorio extensions/ que existe en los binarios de PHP para Windows. Podeis descargar esta DLL de las extensiones PECL desde la pagina » PHP Downloads o desde » https://snaps.php.net/. Asimismo, hay una DLL adicional que debe estar disponible para su PATH de sistema para que ésta extensión trabaje. En PHP 4 esta ruta está en el directorio dlls/. Su nombre: Para PHP <= 4.2.0, es libxml2.dll. Para PHP >= 4.3.0, es iconv.dll. Y a partir de PHP 5.0.0, iconv se encuentra compilado con sus binarios Windows de PHP por defecto, así que no se necesitan archivos DLL adicionales.

Funciones obsoletas

Existen varias funciones que no tienen lugar en el estándar DOM y no deberían seguir siendo usadas. Estas funciones son listadas en la siguiente tabla. La función DomNode_append_child() ha cambiado su comportamiento. Ahora agrega un hijo y no un hermano. Si esto afecta su aplicación, use la función DomNode_append_sibling(), la cual no hace parte del conjunto DOM.

Funciones obsoletas y sus reemplazos
Función antigua Función nueva
xmldoc domxml_open_mem()
xmldocfile domxml_open_file()
domxml_new_xmldoc domxml_new_doc()
domxml_dump_mem DomDocument_dump_mem()
domxml_dump_mem_file DomDocument_dump_file()
DomDocument_dump_mem_file DomDocument_dump_file()
DomDocument_add_root DomDocument_create_element() seguido por DomNode_append_child()
DomDocument_dtd DomDocument_doctype()
DomDocument_root DomDocument_document_element()
DomDocument_children DomNode_child_nodes()
DomDocument_imported_node No hay reemplazo.
DomNode_add_child Crear un nuevo nodo, p.ej. con DomDocument_create_element() y agregarlo con DomNode_append_child().
DomNode_children DomNode_child_nodes()
DomNode_parent DomNode_parent_node()
DomNode_new_child Crear un nuevo nodo, p.ej. con DomDocument_create_element() y agregarlo con DomNode_append_child().
DomNode_set_content Crear un nuevo nodo, p.ej. con DomDocument_create_text_node() y agregarlo con DomNode_append_child().
DomNode_get_content El contenido es solo un nodo de texto y puede consultarse con DomNode_child_nodes().
DomNode_set_content El contenido es solo un nodo de texto y puede ser agregado con DomNode_append_child().

Constantes predefinidas

Estas constantes están definidas por esta extensión y estarán disponibles solamente cuando la extensión ha sido o bien compilada dentro de PHP o grabada dinámicamente en tiempo de ejecución.

Constantes XML
Constante Valor Descripción
XML_ELEMENT_NODE (integer) 1 El nodo es un elemento
XML_ATTRIBUTE_NODE (integer) 2 El nodo es un atributo
XML_TEXT_NODE (integer) 3 El nodo es un segmento de texto
XML_CDATA_SECTION_NODE (integer) 4  
XML_ENTITY_REF_NODE (integer) 5  
XML_ENTITY_NODE (integer) 6 El nodo es una entidad como &nbsp;
XML_PI_NODE (integer) 7 El nodo es una instrucción de procesamiento
XML_COMMENT_NODE (integer) 8 El nodo es un comentario
XML_DOCUMENT_NODE (integer) 9 El nodo es un documento
XML_DOCUMENT_TYPE_NODE (integer) 10  
XML_DOCUMENT_FRAG_NODE (integer) 11  
XML_NOTATION_NODE (integer) 12  
XML_GLOBAL_NAMESPACE (integer) 1  
XML_LOCAL_NAMESPACE (integer) 2  
XML_HTML_DOCUMENT_NODE (integer)    
XML_DTD_NODE (integer)    
XML_ELEMENT_DECL_NODE (integer)    
XML_ATTRIBUTE_DECL_NODE (integer)    
XML_ENTITY_DECL_NODE (integer)    
XML_NAMESPACE_DECL_NODE (integer)    
XML_ATTRIBUTE_CDATA (integer)    
XML_ATTRIBUTE_ID (integer)    
XML_ATTRIBUTE_IDREF (integer)    
XML_ATTRIBUTE_IDREFS (integer)    
XML_ATTRIBUTE_ENTITY (integer)    
XML_ATTRIBUTE_NMTOKEN (integer)    
XML_ATTRIBUTE_NMTOKENS (integer)    
XML_ATTRIBUTE_ENUMERATION (integer)    
XML_ATTRIBUTE_NOTATION (integer)    
XPATH_UNDEFINED (integer)    
XPATH_NODESET (integer)    
XPATH_BOOLEAN (integer)    
XPATH_NUMBER (integer)    
XPATH_STRING (integer)    
XPATH_POINT (integer)    
XPATH_RANGE (integer)    
XPATH_LOCATIONSET (integer)    
XPATH_USERS (integer)    
XPATH_NUMBER (integer)    

Clases

La API del módulo sigue el estándar DOM de Nivel 2 tan fielmente como es posible. Por consiguiente, la API es completamente orientada a objetos. Es una buena idea tener el estándar DOM a la mano cuando se usa este módulo. Aunque la API es orientada a objetos, existen varias funciones que pueden ser llamadas en una forma no orientada a objetos, pasando el objeto sobre el que debe operarse como primer argumento. Estas funciones existen principalmente para conservar la compatibilidad con versiones anteriores de esta extensión, y no deberían ser usadas cuando se creen nuevos scripts.

Esta API difiere de la API DOM oficial en dos formas. Primero, todos los atributos de clase son implementados como funciones con el mismo nombre. En segundo lugar, los nombres de funciones siguen la convención de nombres de PHP. esto quiere decir que una función DOM llamada lastChild() será escrita como last_child().

Este módulo define un número de clases, que son listados - incluyendo sus métodos - en las siguientes tablas. Las clases con un equivalente en el estándar DOM son llamadas DOMxxx.

Lista de clases
Nombre de clase Clases padre
DomAttribute DomNode
DomCData DomNode
DomComment DomCData : DomNode
DomDocument DomNode
DomDocumentType DomNode
DomElement DomNode
DomEntity DomNode
DomEntityReference DomNode
DomProcessingInstruction DomNode
DomText DomCData : DomNode
Parser Por el momento aun se llama DomParser
XPathContext  

Clase DomDocument (DomDocument : DomNode)
Nombre de método Nombre de función Anotación
doctype DomDocument_doctype()  
document_element DomDocument_document_element()  
create_element DomDocument_create_element()  
create_text_node DomDocument_create_text_node()  
create_comment DomDocument_create_comment()  
create_cdata_section DomDocument_create_cdata_section()  
create_processing_instruction DomDocument_create_processing_instruction()  
create_attribute DomDocument_create_attribute()  
create_entity_reference DomDocument_create_entity_reference()  
get_elements_by_tagname DomDocument_get_elements_by_tagname()  
get_element_by_id DomDocument_get_element_by_id()  
dump_mem DomDocument_dump_mem() no hace parte del estándar DOM
dump_file DomDocument_dump_file() no hace parte del estándar DOM
html_dump_mem DomDocument_html_dump_mem() no hace parte del estándar DOM
xpath_init xpath_init no hace parte del estándar DOM
xpath_new_context xpath_new_context no hace parte del estándar DOM
xptr_new_context xptr_new_context no hace parte del estándar DOM

Clase DomElement (DomElement : DomNode)
Nombre de método Nombre de función Anotación
tagname DomElement_tagname()  
get_attribute DomElement_get_attribute()  
set_attribute DomElement_set_attribute()  
remove_attribute DomElement_remove_attribute()  
get_attribute_node DomElement_get_attribute_node()  
set_attribute_node DomElement_set_attribute_node()  
get_elements_by_tagname DomElement_get_elements_by_tagname()  
has_attribute DomElement_has_attribute()  

DomNode class
Nombre de método Anotación
DomNode_node_name()  
DomNode_node_value()  
DomNode_node_type()  
DomNode_last_child()  
DomNode_first_child()  
DomNode_child_nodes()  
DomNode_previous_sibling()  
DomNode_next_sibling()  
DomNode_parent_node()  
DomNode_owner_document()  
DomNode_insert_before()  
DomNode_append_child()  
DomNode_append_sibling() No se encuentra en el estándar DOM. Esta función emula el comportamiento antiguo de DomNode_append_child().
DomNode_remove_child()  
DomNode_has_child_nodes()  
DomNode_has_attributes()  
DomNode_clone_node()  
DomNode_attributes()  
DomNode_unlink_node() No se encuentra en el estándar DOM
DomNode_replace_node() No se encuentra en el estándar DOM
DomNode_set_content() No se encuentra en el estándar DOM, obsoleta
DomNode_get_content() No se encuentra en el estándar DOM, obsoleta
DomNode_dump_node() No se encuentra en el estándar DOM
DomNode_is_blank_node() No se encuentra en el estándar DOM

Clase DomAttribute (DomAttribute : DomNode)
Nombre de método Anotación
name DomAttribute_name()  
value DomAttribute_value()  
specified DomAttribute_specified()  

Clase DomProcessingInstruction (DomProcessingInstruction : DomNode)
Nombre de método Nombre de función Anotación
target DomProcessingInstruction_target()  
data DomProcessingInstruction_data()  

Clase Parser
Nombre de método Nombre de función Anotación
add_chunk Parser_add_chunk()  
end Parser_end()  

Clase XPathContext
Nombre de método Nombre de función Anotación
eval XPathContext_eval()  
eval_expression XPathContext_eval_expression()  
register_ns XPathContext_register_ns()  

Clase DomDocumentType (DomDocumentType : DomNode)
Nombre de método Nombre de función Anotación
name DomDocumentType_name()  
entities DomDocumentType_entities()  
notations DomDocumentType_notations()  
public_id DomDocumentType_public_id()  
system_id DomDocumentType_system_id()  
internal_subset DomDocumentType_internal_subset()  

La clase DomDtd es derivada de DomNode. DomComment es derivada de DomCData.

Ejemplos

Varios ejemplos en esta referencia requieren una cadena XML. En lugar de repetir esta cadena en cada ejemplo, será puesta en un archivo el cual será incluido en cada ejemplo. Este archivo de inclusión es mostrado en la siguiente sección de ejemplo. Alternativamente, es posible crear un documento XML y leerlo con DomDocument_open_file().

Example#1 Archivo de inclusión ejemplo.inc con una cadena XML

<?php
$cadena_xml 
"<?xml version='1.0' standalone='yes'?>
<!DOCTYPE chapter SYSTEM '/share/sgml/Norman_Walsh/db3xml10/db3xml10.dtd'
[ <!ENTITY sp \"spanish\">
]>
<!-- lsfj  -->
<chapter language='en'><title language='en'>Title</title>
 <para language='ge'>
  &sp;
  <!-- comment -->
  <informaltable ID='findme' language='&sp;'>
   <tgroup cols='3'>
    <tbody>
     <row><entry>a1</entry><entry
morerows='1'>b1</entry><entry>c1</entry></row>
<row><entry>a2</entry><entry>c2</entry></row>
     <row><entry>a3</entry><entry>b3</entry><entry>c3</entry></row>
    </tbody>
   </tgroup>
  </informaltable>
 </para>
</chapter>"
;
?>

Table of Contents