XXV. DOM XML Funktionen

Einführung

Warnung

Diese Erweiterung ist EXPERIMENTELL. Das Verhalten dieser Erweiterung, einschließlich der Funktionsnamen, und alles Andere was hier dokumentiert ist, kann sich in zukünftigen PHP-Versionen ohne Ankündigung ändern. Seien Sie gewarnt und verwenden Sie diese Erweiterung auf eigenes Risiko.

Die DOM XML Erweiterung wurde in PHP 4.3.0 überholt, um dem DOM Standard besser zu entsprechen. Die Erweiterung enthält noch immer viele alte Funktionen, die aber nicht mehr benutzt werden sollten. Im Besonderen sollten nicht objektorientierte Funktionen vermieden werden.

Diese Erweiterung erlaubt es, an einem XML Dokument mit dem DOM API zu arbeiten. Sie bietet auch die Funktion domxml_xmltree(), um das gesamte XML Dokument in einen Baum von PHP Objekten zu verwandeln. Zur Zeit sollten Sie diesen Baum nur zum Lesen verwenden — Sie können ihn zwar modifizieren, aber nachdem DomDocument_dump_mem() nicht darauf angewendet werden kann, macht dies keinen Sinn. Sollten Sie eine XML Datei lesen und eine modifizierte Version schreiben wollen, benutzen Sie die Funktionen DomDocument_create_element(), DomDocument_create_text_node(), set_attribute(), etc. und schließlich DomDocument_dump_mem().

Anforderungen

Diese Erweiterung macht von der GNOME XML library Gebrauch. Laden Sie diese bitte herunter und installieren Sie diese Bibliothek. Sie werden zumindest libxml-2.4.14 benötigen. Um DOM XSLT Features zu benutzen, können Sie die libxslt library und EXSLT Erweiterungen von http://www.exslt.org/ verwenden. Laden Sie diese Bibliotheken herunter und installieren Sie diese, wenn Sie den Einsatz von (erweiterten) XSLT Features planen. Sie werden zumindest libxslt-1.0.18 benötigen.

Installation

This extension is only available if PHP was configured with --with-dom[=DIR]. Add --with-dom-xslt[=DIR] to include DOM XSLT support. DIR is the libxslt install directory. Add --with-dom-exslt[=DIR] to include DOM EXSLT support, where DIR is the libexslt install directory.

Note to Win32 Users: In order to enable this module on a Windows environment, you must copy one additional file from the DLL folder of the PHP/Win32 binary package to the SYSTEM32 folder of your Windows machine (Ex: C:\WINNT\SYSTEM32 or C:\WINDOWS\SYSTEM32). For PHP <= 4.2.0 copy libxml2.dll, for PHP >= 4.3.0 copy iconv.dll from the DLL folder to your SYSTEM32 folder.

Veraltete Funktionen

Es gibt ziemlich viele Funktionen, die nicht in den DOM Standard passen und nicht mehr länger benutzt werden sollten. Diese Funktionen sind in der folgenden Tabelle aufgelistet. Die Funktion DomNode_append_child() hat ihr Verhalten geändert, indem sie nun ein 'Kind' statt einem 'Geschwister' hinzufügt. Wenn Ihre Applikation deshalb nicht mehr funktioniert, verwenden Sie die nicht DOM standardkonforme Funktion DomNode_append_sibling().

Tabelle 1. Veraltete Funktionen und deren Ersatz

Alte FunktionNeue Funktion
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() gefolgt von DomNode_append_child()
DomDocument_dtdDomDocument_doctype()
DomDocument_rootDomDocument_document_element()
DomDocument_childrenDomNode_child_nodes()
DomDocument_imported_nodeKein Ersatz.
DomNode_add_childErstellen Sie einen neuen Knoten mit z.B. DomDocument_create_element() und fügen Sie ihn mit DomNode_append_child() hinzu.
DomNode_childrenDomNode_child_nodes()
DomNode_parentDomNode_parent_node()
DomNode_new_childErstellen Sie einen neuen Knoten mit z.B. DomDocument_create_element() und fügen Sie ihn mit DomNode_append_child() hinzu.
DomNode_set_contentErstellen Sie einen neuen Knoten mit z.B. DomDocument_create_text_node() und fügen Sie ihn mit DomNode_append_child() hinzu.
DomNode_get_contentDer Inhalt ist nur ein Textknoten, auf den mittels DomNode_child_nodes() zugegriffen werden kann.
DomNode_set_contentDer Inhalt ist nur ein Textknoten, der mittels DomNode_append_child() hinzugefügt werden kann.

Vordefinierte Konstanten

Folgende Konstanten werden von dieser Erweiterung definiert und stehen nur zur Verfügung, wenn die Erweiterung entweder statisch in PHP kompiliert oder dynamisch zur Laufzeit geladen wurde.

Tabelle 2. XML constants

ConstantValueDescription
XML_ELEMENT_NODE (integer) 1Node is an element
XML_ATTRIBUTE_NODE (integer) 2Node is an attribute
XML_TEXT_NODE (integer) 3Node is a piece of text
XML_CDATA_SECTION_NODE (integer) 4 
XML_ENTITY_REF_NODE (integer) 5 
XML_ENTITY_NODE (integer) 6Node is an entity like &nbsp;
XML_PI_NODE (integer) 7Node is a processing instruction
XML_COMMENT_NODE (integer) 8Node is a comment
XML_DOCUMENT_NODE (integer) 9Node is a document
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)   

Klassen

Das API dieses Moduls entspricht dem DOM Level 2 Standard so weit wie möglich. Folglich ist das API vollständig objektorientiert. Es wäre sinnvoll, den DOM Standard verfügbar zu haben, wenn Sie dieses Modul benutzen. Obwohl das API objektorientiert ist gibt es viele Funktionen, die in einer nicht objektorientierten Art aufgerufen werden können, indem das zu bearbeitende Objekt als das erste Argument übergeben wird. Diese Funktionen dienen hauptsächlich der Kompatibilität zu älteren Versionen dieser Erweiterung und sollten deshalb beim Erstellen neuer Skripte nicht mehr verwendet werden.

Dieses API unterscheidet sich von dem offiziellen DOM API auf zwei Arten. Erstens sind alle Klassenattribute als Funktionen mit dem selben Namen implementiert. Zweitens folgen die Funktionsnamen der PHP Namenskonvention. Das heißt, dass eine DOM Funktion lastChild() als last_child() geschrieben wird.

Dieses Modul definiert eine Anzahl Klassen, die — inklusive ihrer Methoden — in den folgenden Tabellen aufgelistet sind. Klassen mit einem Äquivalent im DOM Standard werden DOMxxx genannt.

Tabelle 3. Liste der Klassen

KlassennameBasisklassen
DomAttributeDomNode
DomCDataDomNode
DomCommentDomCData : DomNode
DomDocumentDomNode
DomDocumentTypeDomNode
DomElementDomNode
DomEntityDomNode
DomEntityReferenceDomNode
DomProcessingInstructionDomNode
DomTextDomCData : DomNode
ParserDerzeit noch immer DomParser genannt
XPathContext 

Tabelle 4. DomDocument Klasse (DomDocument : DomNode)

MethodennameFunktionsnameAnmerkung
doctypeDomDocument_doctype() 
document_elemnentDomDocument_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()kein DOM Standard
dump_fileDomDocument_dump_file()kein DOM Standard
html_dump_memDomDocument_html_dump_mem()kein DOM Standard
xpath_initxpath_initkein DOM Standard
xpath_new_contextxpath_new_contextkein DOM Standard
xptr_new_contextxptr_new_contextkein DOM Standard

Tabelle 5. DomElement Klasse (DomElement : DomNode)

MethodennameFunktionsnameAnmerkung
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() 

Tabelle 7. DomAttribute Klasse (DomAttribute : DomNode)

Methodenname Anmerkung
nameDomAttribute_name() 
valueDomAttribute_value() 
specifiedDomAttribute_specified() 

Tabelle 8. DomProcessingInstruction Klasse (DomProcessingInstruction : DomNode)

MethodennameFunktionsnameAnmerkung
targetDomProcessingInstruction_target() 
dataDomProcessingInstruction_data() 

Tabelle 9. Parser Klasse

MethodennameFunktionsnameAnmerkung
add_chunkParser_add_chunk() 
endParser_end() 

Tabelle 10. XPathContext Klasse

MethodennameFunktionsnameAnmerkung
evalXPathContext_eval() 
eval_expressionXPathContext_eval_expression() 
register_nsXPathContext_register_ns() 

Tabelle 11. DomDocumentType Klasse (DomDocumentType : DomNode)

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

Die Klasse DomDtd ist von DomNode, und DomComment von DomCData abgeleitet

Beispiele

Viele Beispiele in dieser Referenz erfordern einen XML String. Anstatt diesen String laufend zu wiederholen, wird er in eine Datei geschrieben, die von jedem Beispiel eingebunden wird. Diese einzubindende Datei wird in dem folgenden Beispielteil gezeigt. Alternativ dazu können Sie ein XML Dokument erstellen, und dieses mit DomDocument_open_file() einlesen.

Beispiel 1. Einzubindende Datei example.inc mit XML String

<?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>"
;
?>

Inhaltsverzeichnis
DomAttribute->name --  Gibt den Namen eines Attributes zurück.
DomAttribute->specified --  Überprüft, ob ein Attribut gesetzt ist.
DomAttribute->value --  Gibt den Wert eines Attributes zurück.
DomDocument->add_root [deprecated] --  Fügt ein Wurzelelement hinzu.
DomDocument->create_attribute --  Generiere ein neues Attribut.
DomDocument->create_cdata_section --  Generiere ein neues cdata-Element
DomDocument->create_comment --  Generiere eine neues Kommentarelement
DomDocument->create_element_ns --  Create new element node with an associated namespace
DomDocument->create_element -- Create new element node
DomDocument->create_entity_reference -- 
DomDocument->create_processing_instruction --  Generiert eine neue Ausführungsanweisung
DomDocument->create_text_node --  Generiere ein neues Textelement
DomDocument->doctype --  Gibt den Dokumententyp zurück
DomDocument->document_element --  Gibt das Wurzelelement zurück
DomDocument->dump_file --  Schreibt den internen XML-Baum zurück in eine Datei
DomDocument->dump_mem --  Schreibt den internen XML-Baum in eine Zeichenkette
DomDocument->get_element_by_id --  Sucht nach einem Element mit eine bestimmten ID
DomDocument->get_elements_by_tagname -- 
DomDocument->html_dump_mem --  Schreibt den internen XML-Baum als HTML in eine Zeichenkette
DomDocument->xinclude --  Substitutes XIncludes in a DomDocument Object.
DomDocumentType->entities --  Returns list of entities
DomDocumentType->internal_subset --  Returns internal subset
DomDocumentType->name --  Returns name of document type
DomDocumentType->notations --  Returns list of notations
DomDocumentType->public_id --  Returns public id of document type
DomDocumentType->system_id --  Returns system id of document type
DomElement->get_attribute_node --  Returns value of attribute
DomElement->get_attribute --  Returns value of attribute
DomElement->get_elements_by_tagname --  Gets elements by tagname
DomElement->has_attribute --  Checks to see if attribute exists
DomElement->remove_attribute --  Removes attribute
DomElement->set_attribute --  Adds new attribute
DomElement->tagname --  Returns name of element
DomNode->add_namespace --  Adds a namespace declaration to a node.
DomNode->append_child --  Adds new child at the end of the children
DomNode->append_sibling --  Adds new sibling to a node
DomNode->attributes --  Returns list of attributes
DomNode->child_nodes --  Returns children of node
DomNode->clone_node --  Clones a node
DomNode->dump_node --  Dumps a single node
DomNode->first_child --  Returns first child of node
DomNode->get_content --  Gets content of node
DomNode->has_attributes --  Checks if node has attributes
DomNode->has_child_nodes --  Checks if node has children
DomNode->insert_before --  Inserts new node as child
DomNode->is_blank_node --  Checks if node is blank
DomNode->last_child --  Returns last child of node
DomNode->next_sibling --  Returns the next sibling of node
DomNode->node_name --  Returns name of node
DomNode->node_type --  Returns type of node
DomNode->node_value --  Returns value of a node
DomNode->owner_document --  Returns the document this node belongs to
DomNode->parent_node --  Returns the parent of the node
DomNode->prefix --  Returns name space prefix of node
DomNode->previous_sibling --  Returns the previous sibling of node
DomNode->remove_child --  Removes child from list of children
DomNode->replace_child --  Replaces a child
DomNode->replace_node --  Replaces node
DomNode->set_content --  Sets content of node
DomNode->set_name --  Sets name of node
DomNode->set_namespace --  Sets namespace of a node.
DomNode->unlink_node --  Deletes node
DomProcessingInstruction->data --  Returns data of pi node
DomProcessingInstruction->target --  Returns target of pi node
DomXsltStylesheet->process --  Applies the XSLT-Transformation on a DomDocument Object.
DomXsltStylesheet->result_dump_file --  Dumps the result from a XSLT-Transformation into a file
DomXsltStylesheet->result_dump_mem --  Dumps the result from a XSLT-Transformation back into a string
domxml_new_doc --  Creates new empty XML document
domxml_open_file -- Creates a DOM object from XML file
domxml_open_mem -- Creates a DOM object of an XML document
domxml_version --  Get XML library version
domxml_xmltree --  Creates a tree of PHP objects from an XML document
domxml_xslt_stylesheet_doc --  Creates a DomXsltStylesheet Object from a DomDocument Object.
domxml_xslt_stylesheet_file --  Creates a DomXsltStylesheet Object from an XSL document in a file.
domxml_xslt_stylesheet --  Creates a DomXsltStylesheet Object from an XML document in a string.
xpath_eval_expression --  Evaluates the XPath Location Path in the given string
xpath_eval --  Evaluates the XPath Location Path in the given string
xpath_new_context --  Creates new xpath context
xptr_eval --  Evaluate the XPtr Location Path in the given string
xptr_new_context --  Create new XPath Context