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.
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
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)
Tabla 5. Clase DomElement (DomElement : DomNode)
Tabla 7. Clase DomAttribute (DomAttribute : DomNode)
Tabla 8. Clase DomProcessingInstruction (DomProcessingInstruction :
DomNode)
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)
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().
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>"; ?>
|
|