Учебник PHP

           

XXV. Функции DOM XML


Введение

Предупреждение!
Это расширение является ЭКСПЕРИМЕНТАЛЬНЫМ. Поведение этого расширения, имена его функций и всё, что задокументировано, может измениться в последующих релизах РНР без предупреждения. Вы предупреждены и можете использовать это расширение только под вашу ответственность.

Расширение domxml может быть переопределено в версии PHP 4.3.0 в пользу лучшего соответствия стандарту DOM. В этом расширении всё ещё имеются некоторые старые функции, но они более не должны использоваться. Особо нужно исключить не-объектно-ориентированные функции.

Это расширение позволяет работать с XML-документами с помощью DOM API. Оно также предоставляет функцию domxml_xmltree() для включения всего XML-документа в дерево PHP-объектов. В настоящее время это дерево должно считаться read-only - вы можете его модифицировать, но это не имеет смысла, поскольку DomDocument_dump_mem() не может быть применена. Следовательно, если вы хотите читать XML-файл и записывать модифицированную его версию, используйте функции DomDocument_create_element(), DomDocument_create_text_node(), set_attribute(), etc. и в конце - DomDocument_dump_mem().


Требования

Это расширение использует GNOME xml-библиотеки. Загрузите и установите эту библиотеку. Вам понадобится как минимум версия libxml-2.2.7.


Установка

Это расширение доступно, если PHP был сконфигурирован с опцией --with-dom=[DIR].


Не рекомендуемые функции

Имеются некоторые функции, которые не вписываются стандарт DOM и не должны поэтому использоваться; они перечислены в следующей таблице. Функция DomNode_append_child() изменила поведение. Она добавляет теперь потомка, а не родственника. Если это нарушает работу вашего приложения, используйте не-DOM-функцию DomNode_append_sibling().

Таблица 1. Не рекомендуемые функции и замены для них
Старая функция Новая функция
xmldoc domxml_open_mem()
xmldocfiel domxml_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_root DomDocument_create_element() с последующей DomNode_append_child()
DomDocument_dtd DomDocument_doctype()
DomDocument_root DomDocument_document_element()
DomDocument_childrenDomNode_child_nodes()
DomDocument_imported_nodeЗамены нет.
DomNode_add_child Создать новый узел с помощью, например, DomDocument_create_element() и добавить его функцией DomNode_append_child().
DomNode_children DomNode_child_nodes()
DomNode_parent DomNode_parent_node()
DomNode_new_child Создать новый узел с помощью, например, DomDocument_create_element() и добавить его функцией DomNode_append_child().
DomNode_set_content Создать новый узел с помощью, например, DomDocument_create_text_node() и добавить его функцией DomNode_append_child().
DomNode_get_content Содержимое является просто текстовым узлом, и доступ к нему может быть получен с помощью DomNode_child_nodes().
DomNode_set_contentСодержимое является просто текстовым узлом и может добавлено с помощью DomNode_append_child().

Предопределённые константы

Эти константы определены данным расширением и будут доступны только в том случае, если либо вкомпилированы в РНР, либо динамически загружены на этапе прогона.

Таблица 2. XML-константы
КонстантаЗначение Описание
XML_ELEMENT_NODE (integer)1Узел является элементом
XML_ATTRIBUTE_NODE ( integer)2Узел является атрибутом
XML_TEXT_NODE (integer)3Узел является блоком текста
XML_CDATA_SECTION_NODE( integer)4 
XML_ENTITY_REF_NODE (integer)5 
XML_ENTITY_NODE(integer) 6Узел является мнемоникой вроде  
XML_PI_NODE (integer)7Узел является инструкцией процессинга
XML_COMMENT_NODE( integer)8Узел является комментарием
XML_DOCUMENT_NODE(integer) 9Узел является документом
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)  

Классы

API этого модуля следует, насколько возможно, стандарту DOM Level 2. Поэтому данный API является полностью объектно-ориентированным. Хорошо было бы иметь доступ к стандарту DOM при использовании этого модуля. Хотя данный API является объектно-ориентированным, имеется много функций, которые можно вызывать не-объектно-ориентированным путём с помощью передачи объекта, с которым работают, как первого аргумента. Эти функции в основном предназначены для сохранения совместимости со старыми версиями расширения, но больше не рекомендуются для использования в новых разработках.

Этот API отличается от официального DOM API двумя вещами. Во-первых, все атрибуты класса реализованы как функции  с тем же именем, а во-вторых - имена  функций следую соглашению PHP по именованию. Это значит, что DOM-функция lastChild() будет записана как last_child().

Этот модуль определяет несколько классов, которые перечислены - включая их методы - в следующих таблицах. Классы с эквивалентом в DOM Standard именуются DOMxxx.

Таблица 3. Список классов
Имя класса Родительский класс
DomAttributeDomNode
DomCData DomNode
DomCommentDomCData : DomNode
DomDocument DomNode
DomDocumentTypeDomNode
DomElementDomNode
DomEntityDomNode
DomEntityReferenceDomNode
DomProcessingInstructionDomNode
DomTextDomCData : DomNode
ParserПока ещё называется DomParser
XPathContext 

Таблица 4. Класс DomDocument (DomDocument : DomNode)
Имя методаИмя функцииПримечание
doctypeDomDocument_doctype()  
document_elemnent DomDocument_document_element() 
create_elementDomDocument_create_element()  
create_text_node DomDocument_create_text_node() 
create_commentDomDocument_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_idDomDocument_get_element_by_id()  
dump_memDomDocument_dump_mem() не DOM стандарт
dump_file DomDocument_dump_file()не DOM стандарт
html_dump_mem DomDocument_html_dump_mem() не DOM стандарт
xpath_initxpath_initне DOM стандарт
xpath_new_contextxpath_new_contextне DOM стандарт
xptr_new_context xptr_new_contextне DOM стандарт

Таблица 5. Класс DomElement (DomElement : DomNode)
Имя метода Имя функцииПримечание
tagname DomElement_tagname() 
get_attributeDomElement_get_attribute()  
set_attribute DomElement_set_attribute() 
remove_attribute DomElement_remove_attribute() 
get_attribute_nodeDomElement_get_attribute_node()  
set_attribute_node DomElement_set_attribute_node()  
get_elements_by_tagname DomElement_get_elements_by_tagname() 
has_attribute DomElement_has_attribute() 

Таблица 6. Класс DomNode
Имя метода Примечание
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() Нет в DOM-стандарте. Эта функция эмулирует бывшее поведение DomNode_append_child().
DomNode_remove_child() 
DomNode_has_child_nodes() 
DomNode_has_attributes() 
DomNode_clone_node() 
DomNode_attributes() 
DomNode_unlink_node()Нет в DOM-стандарте
DomNode_replace_node()Нет в DOM-стандарте
DomNode_set_content() Нет в DOM-стандарте, не рекомендуется
DomNode_get_content()Нет в DOM-стандарте, не рекомендуется
DomNode_dump_node()Нет в DOM-стандарте
DomNode_is_blank_node()Нет в DOM-стандарте

Таблица 7. Класс DomAttribute (DomAttribute : DomNode)
Имя метода Примечание
name DomAttribute_name() 
value DomAttribute_value() 
specifiedDomAttribute_specified()  

Таблица 8. Класс DomProcessingInstruction (DomProcessingInstruction : DomNode)
Имя методаИмя функцииПримечание
target DomProcessingInstruction_target() 
data DomProcessingInstruction_data()  

Таблица 9. Класс Parser
<
Имя методаИмя функцииПримечание
add_chunk Parser_add_chunk() 
endParser_end()  

Таблица 10. Класс XPathContext
Имя методаИмя функцииПримечание
evalXPathContext_eval() 
eval_expression XPathContext_eval_expression() 
register_ns XPathContext_register_ns() 

Таблица 11. Класс DomDocumentType (DomDocumentType : DomNode)
Имя методаИмя функцииПримечание
name DomDocumentType_name() 
entitiesDomDocumentType_entities()  
notationsDomDocumentType_notations()  
public_id DomDocumentType_public_id() 
system_id DomDocumentType_system_id() 
internal_subsetDomDocumentType_internal_subset()  

Класс DomDtd происходит от DomNode. DomComment происходит от DomCData.


Примеры

Многие примеры в этом справочнике требуют строки xml. Вместо повторения этой строки в каждом примере, она будет помещена в файл и включена в каждый пример. Этот include-файл показан в следующем разделе-примере. Вы можете также создать xml-документ и читать его с помощью DomDocument_open_file().

Пример 1. Include-файл example.inc с xml-строкой
Содержание раздела