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.
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.
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.
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(). |
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) |
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.
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>";
?>