uznay-chto-hochesh.narod.ru

-сайт для интересующихся людей

Учебник - справочник по PHP.

Здесь Вы найдете что хотели

Меню сайта
Главная
Введение
Справочник языка
Возможности РНР
Функции (справочник)
Расширение РНР 4.0
F.A.Q. частые вопросы
Приложения
Алфавитный указатель
Друзья сайта
сделай сайт сам! пособие по html
изучение html и web-дизайна для новичков
Бесплатная отправка смс на все операторы
Реклама
  Консультант по грудному вскармливанию подробности на сайте. | dvd порно почтой | устройство системы вентиляции салона.
Назад Вперёд

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-строкой
<?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;
  <!-- комментарий -->
  <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>";
?>
Содержание
DomAttribute->name - возвращает имя атрибута
DomAttribute->specified - проверяет, специфицирован ли атрибут
DomAttribute->value - возвращает значение атрибута
DomDocument->add_root [не рекомендуется применять] - добавляет узел root
DomDocument->create_attribute - создаёт новый атрибут
DomDocument->create_cdata_section - создаёт новый узел cdata
DomDocument->create_comment - создаёт новый узел комментария
DomDocument->create_element - создаёт новый узел элемента
DomDocument->create_entity_reference -
DomDocument->create_processing_instruction - создаёт новый узел PI
DomDocument->create_text_node - создаёт новый текстовый узел
DomDocument->doctype - возвращает тип документа
DomDocument->document_element - возвращает узел элемента root
DomDocument->dump_file - выполняет дамп внутреннего дерева XML в файл
DomDocument->dump_mem - выполняет дамп внутреннего дерева XML в строку
DomDocument->get_element_by_id - ищет элемент с определённым id
DomDocument->get_elements_by_tagname -
DomDocument->html_dump_mem - выполняет дамп внутреннего дерева XML в строку как HTML
DomDocumentType->entities - возвращает список мнемоник
DomDocumentType->internal_subset - возвращает внутренний поднабор
DomDocumentType->name - возвращает имя типа документа
DomDocumentType->notations - возвращает список нотаций
DomDocumentType->public_id - возвращает public id типа документа
DomDocumentType->system_id - возвращает system id типа документа
DomElement->get_attribute_node - возвращает значение атрибута
DomElement->get_attribute - возвращает значение атрибута
DomElement->get_elements_by_tagname - добавляет новый атрибут
DomElement->has_attribute - добавляет новый атрибут
DomElement->remove_attribute - добавляет новый атрибут
DomElement->set_attribute_node - добавляет новый атрибут
DomElement->set_attribute - добавляет новый атрибут
DomElement->tagname - возвращает имя элемента
DomNode->append_child - добавляет нового потомка в конец потомков
DomNode->append_sibling - добавляет нового родственника в узел
DomNode->attributes - возвращает список атрибутов
DomNode->child_nodes - возвращает потомков узла
DomNode->clone_node - клонирует узел
DomNode->dump_node - дамп отдельного узла
DomNode->first_child - возвращает первого потомка узла
DomNode->get_content - получает содержимое узла
DomNode->has_attributess - проверяет, имеет ли узел атрибуты
DomNode->has_child_nodes - проверяет, имеет ли узел потомков
DomNode->insert_before - вставляет новый узел как потомка
DomNode->is_blank_node - проверяет, является ли узел чистым
DomNode->last_child - возвращает последнего потомка узла
DomNode->next_sibling - возвращает следующего родственника узла
DomNode->node_name - возвращает имя узла
DomNode->node_type - возвращает тип узла
DomNode->node_value - возвращает значение узла
DomNode->owner_document - возвращает документ, к которому этот узел принадлежит
DomNode->parent_node - возвращает предка узла
DomNode->prefix - возвращает префикс пространства имён узла
DomNode->previous_sibling - возвращает предыдущего родственника узла
DomNode->remove_child - удаляет потомка из списка потомков
DomNode->replace_child - замещает потомка
DomNode->replace_node - замещает узел