XXV. Funzioni DOM XML

Introduzione

Avvertimento

Questo modulo è SPERIMENTALE. Ovvero, il comportamento di queste funzioni, i nomi di queste funzioni, in definitiva tutto ciò che è documentato qui può cambiare nei futuri rilasci del PHP senza preavviso. Siete avvisati, l'uso di questo modulo è a vostro rischio.

Nella versione 4.3.0 di PHP l'estensione DOM XML è stata rivista in modo da fornire una migliore adesione allo standard DOM. Il modulo contiene ancora diverse vecchie funzioni, ma non dovrebbero essere più usate. Specialmente quelle funzioni non orientate agli oggetti.

Questo modulo permette di operare con un documento XML utilizzando API DOM. Inoltre viene fornita una funzione, domxml_xmltree(), per convertire l'intero documento XML in un albero di oggetti PHP. Attualmente questo albero dovrebbe essere considerato di sola lettura, è possibile modificarlo, ma questa operazione non avrebbe senso dato che la funzione DomDocument_dump_mem() non può essere applicata all'albero. Pertanto se si desidera leggere un file XML e scriverne una versione modificata, occorre utilizzare le funzioni DomDocument_create_element(), DomDocument_create_text_node(), set_attribute(), ecc. ed infine DomDocument_dump_mem().

Requisiti

Questo modulo utilizza la libreria GNOME xml library. Fare il download ed installare questa libreria. Occorre avere almeno la libxml-2.4.14. Per potere utilizzare le caratteristiche previste nel DOM XSLT occorre utilizzare libxslt library ed EXSLT enhancements da http://www.exslt.org/. Scaricare ed installare queste librerie se si prevede di utilizzare la funzioni avanzate di XSLT. Occorre almeno la versione libxslt-1.0.18.

Installazione

Questo modulo è disponibile soltanto se il PHP è stato configurato con --with-dom=[DIR]. Aggiungere --with-dom-xslt[=DIR] per includere il supporto al DOM XSLT support. DIR indica la directory in cui è installato libxslt. Aggiungere --with-dom-exslt[=DIR] per includere il supporto al DOM EXSLT, dove DIR indica la directory in cui è installato libexslt.

Nota per gli utenti Win32: Per potere abilitare questa estensione sui sistemi Windows, occorre copiare file addizionali dalla directory DLL della dustribuzione PHP/Win32 nella directory SYSTEM32 della macchina Windows (ad esempio: C\WINNT\SYSTEM32 oppure c:\WINDOWS\SYSTEM32). Per le versioni di PHP <= 4.2.0 copiare il file libxml2.dll, per le versioni >= 4.3.0 copiare il file >iconv.dll.

Funzioni deprecate

Esistono alcune funzioni che non rientrano nello standard DOM e quindi non dovrebbero essere più utilizzate come evidenziato nella tabella seguente. La funzione DomNode_append_child() ha modificato il suo comportamento. Attualmente aggiunge un figlio e non un elemento fratello. Se ciò crea problemi alle applicazioni si può usare la funzione non DOM

Tabella 1. Funzioni deprecate e loro sostituti

Vecchia funzioneNuova funzione
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() seguita da DomNode_append_child()
DomDocument_dtdDomDocument_doctype()
DomDocument_rootDomDocument_document_element()
DomDocument_childrenDomNode_child_nodes()
DomDocument_imported_nodeNessun sostituto.
DomNode_add_childCreare un nuovo nodo con, ad esempio, DomDocument_create_element() e aggiungere il figlio con DomNode_append_child().
DomNode_childrenDomNode_child_nodes()
DomNode_parentDomNode_parent_node()
DomNode_new_childCreare un nuovo nodo con, ad esempio, DomDocument_create_element() e aggiungere il figlio con DomNode_append_child().
DomNode_get_contentIl contenuto è semplicemente un nodo di testo ed è accessibile tramite DomNode_child_nodes().
DomNode_set_contentIl contenuto è semplicemente un nodo di testo e può essere aggiunto con DomNode_append_child().

Costanti predefinite

Queste costanti sono definite da questa estensione e sono disponibili solo se l'estensione è stata compilata nel PHP o se è stata caricata dinamicamente a runtime.

Tabella 2. Costanti XML

CostanteValoreDescrizione
XML_ELEMENT_NODE (integer) 1Il nodo è un elemento
XML_ATTRIBUTE_NODE (integer) 2Il nodo è un attributo
XML_TEXT_NODE (integer) 3Il nodo è un segmento di testo
XML_CDATA_SECTION_NODE (integer) 4 
XML_ENTITY_REF_NODE (integer) 5 
XML_ENTITY_NODE (integer) 6Il nodo è un'entità come, ad esempio, &nbsp;
XML_PI_NODE (integer) 7Il nodo è una istruzione di processamento
XML_COMMENT_NODE (integer) 8Il nodo è un commento
XML_DOCUMENT_NODE (integer) 9Il nodo è 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)   

Classi

Le API di questo modulo aderiscono il più possibile allo standard DOM di livello 2. Di conseguenza le API sono completamente orientate agli oggetti. Si ritiene una buona idea avere disponibile lo standard DOM quando si utilizza questo modulo. Sebbene le API siano orientate agli oggetti, vi sono alcune funzioni che possono essere richiamate in modo non orientato agli oggetti, passando l'oggetto su cui operare come primo argomento. Queste funzioni sono state mantenute per compatibilità verso le vecchie versioni del modulo, ma non se ne incoraggia l'uso nello sviluppo di nuovi prodotti.

Queste API differiscono della API DOM ufficiali per due aspetti. Primo, gli attributi della classe sono implermentati come funzioni con il medesimo nome e, secondo, i nomi delle funzioni seguono la convenzione del PHP. Questo significa che la funzione DOM lastChild() sarà chiamata last_child().

In questo modulo sono definite diverse classi, queste saranno elencate - compresi i loro metodi - nella seguente tabella. Le classi con un equivalente nello standard DOM sono chiamate DOMxxx.

Tabella 3. Elenco delle classi

Nome della classeClasse genitrice
DomAttributeDomNode
DomCDataDomNode
DomCommentDomCData : DomNode
DomDocumentDomNode
DomDocumentTypeDomNode
DomElementDomNode
DomEntityDomNode
DomEntityReferenceDomNode
DomProcessingInstructionDomNode
DomTextDomCData : DomNode
ParserAttualmente chiamata DomParser
XPathContext 

Tabella 4. Classe DomDocument (DomDocument : DomNode)

MetodiFunzioniNote
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()non standard DOM
dump_fileDomDocument_dump_file()non standard DOM
html_dump_memDomDocument_html_dump_mem()non standard DOM
xpath_initxpath_initnon standard DOM
xpath_new_contextxpath_new_contextnon standard DOM
xptr_new_contextxptr_new_contextnon standard DOM

Tabella 5. Classe DomElement (DomElement : DomNode)

MetodoFunzioniNote
tagnameDomElement_tagname() 
get_attributeDomElement_get_attribute() 
set_attributeDomElement_set_attribute() 
remove_attributeDomElement_remove_attribute() 
get_attribute_nodeDomElement_get_attribute_node() 
get_elements_by_tagnameDomElement_get_elements_by_tagname() 
has_attributeDomElement_has_attribute() 

Tabella 7. Classe DomAttribute (DomAttribute : DomNode)

Metodo Note
nameDomAttribute_name() 
valueDomAttribute_value() 
specifiedDomAttribute_specified() 

Tabella 8. Classe DomProcessingInstruction (DomProcessingInstruction : DomNode)

MetodoFunzioneNote
targetDomProcessingInstruction_target() 
dataDomProcessingInstruction_data() 

Tabella 9. Classe Parser class

MetodoFunzioneNote
add_chunkParser_add_chunk() 
endParser_end() 

Tabella 10. Classe XPathContext

MetodoFunzioneNote
evalXPathContext_eval() 
eval_expressionXPathContext_eval_expression() 
register_nsXPathContext_register_ns() 

Tabella 11. Classe DomDocumentType (DomDocumentType : DomNode)

MetodoFunzioneNote
nameDomDocumentType_name() 
entitiesDomDocumentType_entities() 
notationsDomDocumentType_notations() 
public_idDomDocumentType_public_id() 
system_idDomDocumentType_system_id() 
internal_subsetDomDocumentType_internal_subset() 

La classe DomDtd è derivata da DomNode. Mentre DomComment è derivata da DomCData

Esempi

Diversi esempi presenti in questo manuale richiedono un testo XML. Anzichè ripetere questo testo in ogni esempio, si inserirà il testo in un file che verrà incluso in ogni esempio. Questo file di include verrà illustrato nel seguente esempio. Si può anche creare un documento XML e leggerlo con DomDocument_open_file().

Esempio 1. File di include example.inc con testo XML

<?php
$xmlstr
= "<?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'>
  &amp;sp;
  <!-- comment -->
  <informaltable ID='findme' language='&amp;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>"
;
?>

Sommario
DomAttribute->name --  Restituisce il nome di un attributo
DomAttribute->specified --  Verifica se l'attributo è presente
DomAttribute->value --  Restituisce il valore di un attributo
DomDocument->add_root --  Aggiunge un nodo radice [deprecated]
DomDocument->create_attribute --  Crea un nuovo attributo
DomDocument->create_cdata_section -- Crea un nuovo nodo cdata
DomDocument->create_comment -- Crea un nodo commento
DomDocument->create_element-ns --  Crea un nodo elemento con il relativo spazio dei nomi
DomDocument->create_element -- Crea un nodo elemento
DomDocument->create_entity_reference -- 
DomDocument->create_processing_instruction -- Crea un nuovo nodo PI
DomDocument->create_text_node -- Crea un nodo di testo
DomDocument->doctype --  Restituisce il tipo di documento
DomDocument->document_element --  Restituisce il nodo radice
DomDocument->dump_file --  Scarica in un file l'albero XML interno
DomDocument->dump_mem --  Scarica in una stringa la struttura XML interna
DomDocument->get_element_by_id --  Ricerca di un elemento per id
DomDocument->get_elements_by_tagname --  Restituisce un elemento dato il tag
DomDocument->html_dump_mem --  Scarica la struttura XML interna in una stringa come HTML
DomDocument->xinclude --  Sostituisce gli XIncludes in un oggetto DomDocument
DomDocumentType->entities --  Restituisce l'elenco delle entità
DomDocumentType->internal_subset --  Restituisce un subset interno
DomDocumentType->name --  Restituisce il nome del tipo documento
DomDocumentType->notations --  Restituisce la lista delle notazioni
DomDocumentType->public_id --  Restituisce l'identificatore pubblico del tipo documento
DomDocumentType->system_id --  Restituisce l'identificativo di sistema del tipo documento
DomElement->get_attribute_node --  Restituisce il valore di un attributo
DomElement->get_attribute --  Restituisce il valore di un attributo
DomElement->get_elements_by_tagname --  Restituisce l'elemento con il tag dato
DomElement->has_attribute --  Verifica l'esistenza dell'attributo
DomElement->remove_attribute --  Rimuove un attributo
DomElement->set_attribute --  Valorizza un attributo
DomElement->tagname --  Restituisce il nome di un elemento
DomNode->add_namespace --  Aggiunge la dichiarazione dello spazio dei nomi ad un nodo
DomNode->append_child --  Accoda un nuovo figlio
DomNode->append_sibling --  Aggiunge un nodo fratello
DomNode->attributes --  Restituisce la lista degli attributi
DomNode->child_nodes --  Restituisce i figli di un nodo
DomNode->clone_node --  Clona un nodo
DomNode->dump_node --  Scarica un singolo nodo
DomNode->first_child --  Restituisce il primo nodo figlio
DomNode->get_content --  Restituisce il contenuto del nodo
DomNode->has_attributes --  Verifica se il nodo ha attributi
DomNode->has_child_nodes --  Verifica se esistono nodi figlio
DomNode->insert_before --  Inserisce un nuovo nodo come figlio
DomNode->is_blank_node --  Verifica se il nodo è vuoto
DomNode->last_child --  Restituisce l'ultimo nodo figlio del nodo
DomNode->next_sibling --  Restituisce il successivo fratello del nodo
DomNode->node_name --  Restituisce il nome del nodo
DomNode->node_type --  Restituisce il tipo di nodo
DomNode->node_value --  Restituisce il valore di un nodo
DomNode->owner_document --  Restituisce il documento a cui appartiene questo nodo
DomNode->parent_node --  Restituisce il genitore del nodo
DomNode->prefix --  Restituisce lo spazio dei nomi prefisso al nodo
DomNode->previous_sibling --  Restituisce il nodo fratello precedente
DomNode->remove_child --  Rimuove un nodo figlio dalla lista dei figli
DomNode->replace_child --  Sostituisce un nodo figlio
DomNode->replace_node --  Sostituisce il nodo
DomNode->set_content --  Imposta il contenuto del nodo
DomNode->set_name --  Imposta il nome del nodo
DomNode->set_namespace --  Imposta lo spazio dei nomi del nodo
DomNode->unlink_node --  Rimuove il nodo
DomProcessingInstruction->data --  Restituisce i dati di un nodo PI
DomProcessingInstruction->target --  Restituisce il target di un nodo PI
DomXsltStylesheet->process --  Applica una trasformazione XSLT ad un oggetto DomDocument
DomXsltStylesheet->result_dump_file --  Scarica il risultato di una trasformazione XSLT in un file
DomXsltStylesheet->result_dump_mem --  Scarica il risultato di una trasformazione XSLT in una stringa
domxml_new_doc --  Crea un nuovo documento XML vuoto
domxml_open_file -- Crea un oggetto DOM da un file XML
domxml_open_mem -- Crea un oggetto DOM da un documento XML
domxml_version --  restituisce la versione della libreria XML
domxml_xmltree --  Crea un albero di oggetti PHP da un documento XML
domxml_xslt_stylesheet_doc --  Crea un oggetto DomXsltStylesheet da un oggetto DomDocument.
domxml_xslt_stylesheet_file --  Crea un oggetto DomXsltStylesheet da un file con un documento XSL
domxml_xslt_stylesheet --  Crea un oggetto DomXsltStylesheet da un documento XML contenuto in una stringa
xpath_eval_expression --  Valuta il percorso XPath nella stringa data
xpath_eval --  Valuta il percorso XPath nella stringa data
xpath_new_context --  Crea un nuovo contesto xpath
xptr_eval --  Valuta il percorso della locazione XPtr nella stringa data
xptr_new_context --  Crea un nuovo contesto XPath