Funciones DOM XML

XXXI. 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().

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

Nota: 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 http://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: http://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 http://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.

Tabla 1. Funciones obsoletas y sus reemplazos

Funci贸n antiguaFunci贸n nueva
xmldocdomxml_open_mem()
xmldocfiledomxml_open_file()
domxml_new_xmldocdomxml_new_doc()
domxml_dump_memDomDocument_dump_mem()
domxml_dump_mem_fileDomDocument_dump_file()
DomDocument_dump_mem_fileDomDocument_dump_file()
DomDocument_add_rootDomDocument_create_element() seguido por DomNode_append_child()
DomDocument_dtdDomDocument_doctype()
DomDocument_rootDomDocument_document_element()
DomDocument_childrenDomNode_child_nodes()
DomDocument_imported_nodeNo hay reemplazo.
DomNode_add_childCrear un nuevo nodo, p.ej. con DomDocument_create_element() y agregarlo con DomNode_append_child().
DomNode_childrenDomNode_child_nodes()
DomNode_parentDomNode_parent_node()
DomNode_new_childCrear un nuevo nodo, p.ej. con DomDocument_create_element() y agregarlo con DomNode_append_child().
DomNode_set_contentCrear un nuevo nodo, p.ej. con DomDocument_create_text_node() y agregarlo con DomNode_append_child().
DomNode_get_contentEl contenido es solo un nodo de texto y puede consultarse con DomNode_child_nodes().
DomNode_set_contentEl 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.

Tabla 2. Constantes XML

ConstanteValorDescripci贸n
XML_ELEMENT_NODE (integer) 1El nodo es un elemento
XML_ATTRIBUTE_NODE (integer) 2El nodo es un atributo
XML_TEXT_NODE (integer) 3El nodo es un segmento de texto
XML_CDATA_SECTION_NODE (integer) 4 
XML_ENTITY_REF_NODE (integer) 5 
XML_ENTITY_NODE (integer) 6El nodo es una entidad como &nbsp;
XML_PI_NODE (integer) 7El nodo es una instrucci贸n de procesamiento
XML_COMMENT_NODE (integer) 8El nodo es un comentario
XML_DOCUMENT_NODE (integer) 9El 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.

Tabla 3. Lista de clases

Nombre de claseClases padre
DomAttributeDomNode
DomCDataDomNode
DomCommentDomCData : DomNode
DomDocumentDomNode
DomDocumentTypeDomNode
DomElementDomNode
DomEntityDomNode
DomEntityReferenceDomNode
DomProcessingInstructionDomNode
DomTextDomCData : DomNode
ParserPor el momento aun se llama DomParser
XPathContext 

Tabla 4. Clase DomDocument (DomDocument : DomNode)

Nombre de m茅todoNombre de funci贸nAnotaci贸n
doctypeDomDocument_doctype() 
document_elementDomDocument_document_element() 
create_elementDomDocument_create_element() 
create_text_nodeDomDocument_create_text_node() 
create_commentDomDocument_create_comment() 
create_cdata_sectionDomDocument_create_cdata_section() 
create_processing_instructionDomDocument_create_processing_instruction() 
create_attributeDomDocument_create_attribute() 
create_entity_referenceDomDocument_create_entity_reference() 
get_elements_by_tagnameDomDocument_get_elements_by_tagname() 
get_element_by_idDomDocument_get_element_by_id() 
dump_memDomDocument_dump_mem()no hace parte del est谩ndar DOM
dump_fileDomDocument_dump_file()no hace parte del est谩ndar DOM
html_dump_memDomDocument_html_dump_mem()no hace parte del est谩ndar DOM
xpath_initxpath_initno hace parte del est谩ndar DOM
xpath_new_contextxpath_new_contextno hace parte del est谩ndar DOM
xptr_new_contextxptr_new_contextno hace parte del est谩ndar DOM

Tabla 5. Clase DomElement (DomElement : DomNode)

Nombre de m茅todoNombre de funci贸nAnotaci贸n
tagnameDomElement_tagname() 
get_attributeDomElement_get_attribute() 
set_attributeDomElement_set_attribute() 
remove_attributeDomElement_remove_attribute() 
get_attribute_nodeDomElement_get_attribute_node() 
set_attribute_nodeDomElement_set_attribute_node() 
get_elements_by_tagnameDomElement_get_elements_by_tagname() 
has_attributeDomElement_has_attribute() 

Tabla 6. DomNode class

Nombre de m茅todoAnotaci贸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

Tabla 7. Clase DomAttribute (DomAttribute : DomNode)

Nombre de m茅todo Anotaci贸n
nameDomAttribute_name() 
valueDomAttribute_value() 
specifiedDomAttribute_specified() 

Tabla 8. Clase DomProcessingInstruction (DomProcessingInstruction : DomNode)

Nombre de m茅todoNombre de funci贸nAnotaci贸n
targetDomProcessingInstruction_target() 
dataDomProcessingInstruction_data() 

Tabla 9. Clase Parser

Nombre de m茅todoNombre de funci贸nAnotaci贸n
add_chunkParser_add_chunk() 
endParser_end() 

Tabla 10. Clase XPathContext

Nombre de m茅todoNombre de funci贸nAnotaci贸n
evalXPathContext_eval() 
eval_expressionXPathContext_eval_expression() 
register_nsXPathContext_register_ns() 

Tabla 11. Clase DomDocumentType (DomDocumentType : DomNode)

Nombre de m茅todoNombre de funci贸nAnotaci贸n
nameDomDocumentType_name() 
entitiesDomDocumentType_entities() 
notationsDomDocumentType_notations() 
public_idDomDocumentType_public_id() 
system_idDomDocumentType_system_id() 
internal_subsetDomDocumentType_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().

Ejemplo 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>"
;
?>

Tabla de contenidos
DomAttribute->name --  Devuelve el nombre de un atributo
DomAttribute->set_value --  Establece el valor de un atributo
DomAttribute->specified --  Revisa si el atributo est谩 especificado
DomAttribute->value --  Devuelve el valor del atributo
DomDocument->add_root --  Agrega un nodo ra铆z [obsoleto]
DomDocument->create_attribute -- Crear un nuevo atributo
DomDocument->create_cdata_section -- Crear un nuevo nodo cdata
DomDocument->create_comment -- Crea un nuevo nodo de comentario
DomDocument->create_element_ns --  Crea un nuevo nodo tipo elemento con un espacio de nombres asociado
DomDocument->create_element -- Crear un nuevo nodo de tipo elemento
DomDocument->create_entity_reference --  Crear una referencia de entidad
DomDocument->create_processing_instruction -- Crea un nuevo nodo PI
DomDocument->create_text_node -- Crear un nuevo nodo de texto
DomDocument->doctype --  Devuelve el tipo de documento
DomDocument->document_element --  Devuelve el nodo del elemento ra铆z
DomDocument->dump_file --  Vuelca el 谩rbol XML interno de vuelta a un archivo
DomDocument->dump_mem --  Vuelca el 谩rbol XML interno de vuelta a una cadena
DomDocument->get_element_by_id --  Busca un elemento con cierto id
DomDocument->get_elements_by_tagname --  Devuelve una matriz de nodos con el nombre de etiqueta dado en el documento o una matriz vac铆a si no se encuentran
DomDocument->html_dump_mem --  Vuelca el 谩rbol XML interno de vuelta a una cadena como HTML
DomDocument->xinclude --  Reemplaza sentencias XInclude en un Objeto DomDocument
DomDocumentType->entities() --  Devuelve una lista de entidades
DomDocumentType->internal_subset() --  Devuelve el sub-conjunto interno
DomDocumentType->name() --  Devuelve el nombre del tipo de documento
DomDocumentType->notations() --  Devuelve una lista de notaciones
DomDocumentType->public_id() --  Devuelve el id p煤blico del tipo de documento
DomDocumentType->system_id() --  Devuelve el id de sistema del tipo de documento
DomElement->get_attribute_node() --  Devuelve el nodo del atributo dado
DomElement->get_attribute() --  Devuelve el valor del atributo dado
DomElement->get_elements_by_tagname() --  Obtiene elementos por el nombre de etiqueta
DomElement->has_attribute() --  Verifica si un atributo existe en el nodo actual
DomElement->remove_attribute() --  Elimina un atributo
DomElement->set_attribute_node() --  Agrega un nuevo atributo
DomElement->set_attribute() --  Define el valor de un atributo
DomElement->tagname() --  Devuelve el nombre del elemento actual
DomNode->add_namespace --  Agrega una declaraci贸n de espacio de nombres a un nodo
DomNode->append_child --  Agrega un nuevo hijo al final del grupo de hijos
DomNode->append_sibling --  Agrega un nuevo hermano a un nodo
DomNode->attributes --  Devuelve la lista de atributos
DomNode->child_nodes --  Devuelve los hijos del nodo
DomNode->clone_node --  Clona un nodo
DomNode->dump_node --  Vuelca un nodo 煤nico
DomNode->first_child --  Devuelve el primer hijo del nodo
DomNode->get_content --  Obtiene el contenido del nodo
DomNode->has_attributes --  Verifica si un nodo tiene atributos
DomNode->has_child_nodes --  Verifica si el nodo tiene hijos
DomNode->insert_before --  Inserta un nodo nuevo como hijo
DomNode->is_blank_node --  Verifica si el nodo est谩 en blanco
DomNode->last_child --  Devuelve el 煤ltimo hijo del nodo
DomNode->next_sibling --  Devuelve el siguiente hermano del nodo
DomNode->node_name --  Devuelve el nombre del nodo
DomNode->node_type --  Devuelve el tipo de nodo
DomNode->node_value --  Devuelve el valor de un nodo
DomNode->owner_document --  Devuelve el documento al que este nodo pertenece
DomNode->parent_node --  Devuelve el padre del nodo
DomNode->prefix --  Devuelve el prefijo de espacio de nombres del nodo
DomNode->previous_sibling --  Devuelve el hermano anterior del nodo
DomNode->remove_child --  Elimina un hijo de una lista de hijos
DomNode->replace_child --  Reemplaza un hijo
DomNode->replace_node --  Reemplaza el nodo
DomNode->set_content --  Define el contenido del nodo
DomNode->set_name --  Define el nombre del nodo
DomNode->set_namespace --  Define el espacio de nombres de un nodo
DomNode->unlink_node --  Elimina el nodo
DomProcessingInstruction->data --  Devuelve los datos de un nodo ProcessingInstruction
DomProcessingInstruction->target --  Devuelve el destino de un nodo ProcessingInstruction
DomXsltStylesheet->process() --  Aplica la Transformaci贸n XSLT sobre un objeto DomDocument
DomXsltStylesheet->result_dump_file() --  Vuelca el resultado de una Transformaci贸n XSLT a un archivo
DomXsltStylesheet->result_dump_mem() --  Vuelca el resultado de una Transformaci贸n XSLT de vuelta a una cadena
domxml_new_doc --  Crea un nuevo documento XML vac铆o
domxml_open_file -- Crea un objeto DOM a partir de un archivo XML
domxml_open_mem -- Crea un objeto DOM desde un documento XML
domxml_version --  Obtiene la versi贸n de la biblioteca XML
domxml_xmltree --  Crea un 谩rbol de objetos PHP a partir de un documento XML
domxml_xslt_stylesheet_doc --  Crea un Objeto DomXsltStylesheet a partir de un Objeto DomDocument
domxml_xslt_stylesheet_file --  Crea un Objeto DomXsltStylesheet a partir de un documento XSL en un archivo
domxml_xslt_stylesheet --  Crea un objeto DomXsltStylesheet desde un documento XSL en una cadena
domxml_xslt_version --  Obtiene la versi贸n de la biblioteca XSLT
xpath_eval_expression --  Eval煤a la Ruta de Ubicaci贸n XPath en la cadena entregada
xpath_eval --  Eval煤a la Ruta de Ubicaci贸n XPatch en la cadena dada
xpath_new_context --  Crea un nuevo contexto xpath
xpath_register_ns_auto --  Registrar el espacio de nombres dado en el contexto XPath pasado
xpath_register_ns --  Registrar el espacio de nombres dado en el contexto XPath pasado
xptr_eval --  Eval煤a la Ruta de Ubicaci贸n XPtr en la cadena dada
xptr_new_context --  Crea un nuevo Contexto XPath