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 Funktion | Neue Funktion |
|---|
| 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() gefolgt von
DomNode_append_child() |
| DomDocument_dtd | DomDocument_doctype() |
| DomDocument_root | DomDocument_document_element() |
| DomDocument_children | DomNode_child_nodes() |
| DomDocument_imported_node | Kein Ersatz. |
| DomNode_add_child | Erstellen Sie einen neuen Knoten mit z.B.
DomDocument_create_element() und fügen Sie ihn mit
DomNode_append_child() hinzu.
|
| DomNode_children | DomNode_child_nodes() |
| DomNode_parent | DomNode_parent_node() |
| DomNode_new_child | Erstellen Sie einen neuen Knoten mit z.B.
DomDocument_create_element() und fügen Sie ihn mit
DomNode_append_child() hinzu.
|
| DomNode_set_content | Erstellen Sie einen neuen Knoten mit z.B.
DomDocument_create_text_node() und fügen Sie ihn mit
DomNode_append_child() hinzu.
|
| DomNode_get_content | Der Inhalt ist nur ein Textknoten, auf den mittels
DomNode_child_nodes() zugegriffen werden kann.
|
| DomNode_set_content | Der 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.
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
| Klassenname | Basisklassen |
|---|
| DomAttribute | DomNode |
| DomCData | DomNode |
| DomComment | DomCData : DomNode |
| DomDocument | DomNode |
| DomDocumentType | DomNode |
| DomElement | DomNode |
| DomEntity | DomNode |
| DomEntityReference | DomNode |
| DomProcessingInstruction | DomNode |
| DomText | DomCData : DomNode |
| Parser | Derzeit noch immer DomParser genannt |
| XPathContext | |
Tabelle 4. DomDocument Klasse (DomDocument : DomNode)
| Methodenname | Funktionsname | Anmerkung |
|---|
| doctype | DomDocument_doctype() | |
| document_elemnent | 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() | kein DOM Standard |
| dump_file | DomDocument_dump_file() | kein DOM Standard |
| html_dump_mem | DomDocument_html_dump_mem() | kein DOM Standard |
| xpath_init | xpath_init | kein DOM Standard |
| xpath_new_context | xpath_new_context | kein DOM Standard |
| xptr_new_context | xptr_new_context | kein DOM Standard |
Tabelle 5. DomElement Klasse (DomElement : DomNode)
| Methodenname | Funktionsname | Anmerkung |
|---|
| 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() | |
| get_elements_by_tagname | DomElement_get_elements_by_tagname() | |
| has_attribute | DomElement_has_attribute() | |
Tabelle 6. DomNode Klasse
| Methodenname | Anmerkung |
|---|
| 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() | Nicht im DOM Standard. Diese Funktion emuliert das frühere
Verhalten von DomNode_append_child(). |
| DomNode_remove_child() | |
| DomNode_has_child_nodes() | |
| DomNode_has_attributes() | |
| DomNode_clone_node() | |
| DomNode_attributes() | |
| DomNode_unlink_node() | Nicht im DOM Standard |
| DomNode_replace_node() | Nicht im DOM Standard |
| DomNode_set_content() | Nicht im DOM Standard, veraltet |
| DomNode_get_content() | Nicht im DOM Standard, veraltet |
| DomNode_dump_node() | Nicht im DOM Standard |
| DomNode_is_blank_node() | Nicht im DOM Standard |
Tabelle 7. DomAttribute Klasse (DomAttribute : DomNode)
| Methodenname | | Anmerkung |
|---|
| name | DomAttribute_name() | |
| value | DomAttribute_value() | |
| specified | DomAttribute_specified() | |
Tabelle 8. DomProcessingInstruction Klasse (DomProcessingInstruction : DomNode)
| Methodenname | Funktionsname | Anmerkung |
|---|
| target | DomProcessingInstruction_target() | |
| data | DomProcessingInstruction_data() | |
Tabelle 9. Parser Klasse
| Methodenname | Funktionsname | Anmerkung |
|---|
| add_chunk | Parser_add_chunk() | |
| end | Parser_end() | |
Tabelle 10. XPathContext Klasse
| Methodenname | Funktionsname | Anmerkung |
|---|
| eval | XPathContext_eval() | |
| eval_expression | XPathContext_eval_expression() | |
| register_ns | XPathContext_register_ns() | |
Tabelle 11. DomDocumentType Klasse (DomDocumentType : DomNode)
| Methodenname | Funktionsname | Anmerkung |
|---|
| name | DomDocumentType_name() | |
| entities | DomDocumentType_entities() | |
| notations | DomDocumentType_notations() | |
| public_id | DomDocumentType_public_id() | |
| system_id | DomDocumentType_system_id() | |
| internal_subset | DomDocumentType_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'> &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>"; ?>
|
|