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.
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.
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 |
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.
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 |
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 |
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() |
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 |
Nombre de método | Anotación | |
---|---|---|
name | DomAttribute_name() | |
value | DomAttribute_value() | |
specified | DomAttribute_specified() |
Nombre de método | Nombre de función | Anotación |
---|---|---|
target | DomProcessingInstruction_target() | |
data | DomProcessingInstruction_data() |
Nombre de método | Nombre de función | Anotación |
---|---|---|
add_chunk | Parser_add_chunk() | |
end | Parser_end() |
Nombre de método | Nombre de función | Anotación |
---|---|---|
eval | XPathContext_eval() | |
eval_expression | XPathContext_eval_expression() | |
register_ns | XPathContext_register_ns() |
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
- 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