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.
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.
Tabla 1. 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(). |
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
| 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.
Tabla 3. 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 |
Tabla 4. 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 |
Tabla 5. 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() |
Tabla 6. 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 |
Tabla 7. Clase DomAttribute (DomAttribute : DomNode)
| Nombre de m茅todo | Anotaci贸n | |
|---|---|---|
| name | DomAttribute_name() | |
| value | DomAttribute_value() | |
| specified | DomAttribute_specified() |
Tabla 8. Clase DomProcessingInstruction (DomProcessingInstruction : DomNode)
| Nombre de m茅todo | Nombre de funci贸n | Anotaci贸n |
|---|---|---|
| target | DomProcessingInstruction_target() | |
| data | DomProcessingInstruction_data() |
Tabla 9. Clase Parser
| Nombre de m茅todo | Nombre de funci贸n | Anotaci贸n |
|---|---|---|
| add_chunk | Parser_add_chunk() | |
| end | Parser_end() |
Tabla 10. 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() |
Tabla 11. 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.
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().