Взаємодія PHP і XML за допомогою DOM XML
Що відбувається, якщо взаємодія PHP і XML здійснюється за допомогою об'єктної моделі стандарту DOM. Модуль DOM XML визначає в PHP кілька класів, таких як DomNode. DomDocument. DomElement. DomText і DomAttribute. більшість з яких йдуть з ядра стандарту DOM. Майже для всіх класів (зокрема, для перерахованих вище) клас DomNode є батьківським. тому його властивості та методи успадковуються всіма іншими класами.
Приклад 14.2. Колекція «Особистості» у вигляді XML-файла (persons.xml)
Надалі, наводячи приклади, ми будемо використовувати цей файл.
Переклад даних XML-файла в об'єкти і класи PHP
Перше, що потрібно зробити, якщо ми хочемо працювати з XML-дані в PHP за допомогою розширення DOM XML. це перевести наявні дані в об'єкти і класи DOM. Це можна зробити декількома способами.
- За допомогою функції domxml_open_mem.
Ця функція обробляє XML-файл, ім'я якого задається параметром filename, і переводить його в об'єкт класу DOMDocument. Доступ до файлу проводиться тільки на читання.
Такі функції, як domxml_open_mem () і domxml_open_file (). як правило, потрібно викликати перед викликом будь-яких інших функцій, пов'язаних з розширенням DOM.
Ці функції перетворять XML-файл в дерево об'єктів. До таких об'єктів можна звертатися за допомогою різних методів. Зокрема, для виділення кореневого елемента використовується метод DomDocument-> document_element ().
Ще існує функція domxml_new_doc (string version). яка створює новий порожній XML-документ. Її параметром є номер версії створюваного документа. Але її ми торкатися не будемо, а будемо вважати, що XML-файл вже створений.
Приклад 14.3. Переклад XML-файла в дерево об'єктів PHP і виділення кореневого елемента
Отже, кожному елементу XML-файлу ми поставили у відповідність якийсь об'єкт. Тепер потрібно навчитися переміщатися по дереву об'єктів і звертатися з цими об'єктами: встановлювати та змінювати їх значення, знаходити їх нащадків і предків, видаляти об'єкти.
Обхід дерева об'єктів
Для отримання значення поточного вузла (незалежно від його типу) використовують метод DomNode-> node_value () або DomNode-> get_content () для отримання вмісту вузла.
Для отримання значення атрибута використовується метод DomElement-> get_attribute (attr_name). А метод DomNode-> child_nodes () повертає масив нащадків даного вузла.
Для того щоб зробити обхід дерева об'єктів, корисно ще вміти розрізняти об'єкти за типами, тобто визначати, чи є вузол елементом (тегом), текстом, атрибутом і т.п. Для цього використовуються спеціальні константи. XML_ELEMENT_NODE визначає, чи є вузол елементом. XML_ATTRIBUTE_NODE визначає, чи є вузол атрибутом, і XML_TEXT_NODE визначає, чи є вузол шматком тексту. Ці константи мають цілочисельні значення 1. 2 і 3 відповідно. Використання цих констант корисно, оскільки розрив рядка, що застосовуються для зручності читання XML-файлів, теж стають вузлами.
Приклад 14.4. Обхід дерева XML
Отже, ми навчилися обходити дерево XML. Тепер можна спробувати що-небудь знайти в XML-файл. Правда, робити це не зовсім зручно знову ж через переносів рядків, які ми використовували при написанні XML-файлу. Нехай наш XML-файл записаний в рядок, а точніше, в ньому є такий рядок:
Додавання нових елементів в XML-документ
Далі розберемо завдання, як можна додати в нашу базу даних нову особистість засобами php.
Потім можна встановити якісь значення для елементів опису особистості. Наприклад, задати ім'я людини, дату його народження і т.п. В кінці потрібно записати отримане опис особистості як нащадка кореневого елемента в дерево DOM за допомогою методу DomNode-> append_child (new_node). де в якості параметра передається створений об'єкт (новий вузол).
У PHP до версії 4.3 перед додаванням нащадка до вузла за допомогою даної функції цей нащадок спочатку копіювався. Таким чином, новий вузол був новою копією, яка могла змінюватися без зміни вузла, переданого як параметр в цю функцію. У більш пізніх версіях PHP новий вузол видаляється з існуючого контексту, якщо він вже є в дереві. Така поведінка відповідає специфікаціям W3C.
Для видалення вузла можна скористатися методом, застосувавши його до вузла, який потрібно видалити, тобто DomNode-> unlink_node ().
Приклад 14.5. Додавання опису нової особистості в каталог
Зверніть увагу на додаткові ПОСИЛАННЯ
Если вас цікавить.
Лекція знайомить з поняттям об'єктної моделі XML-документа і її використанням у PHP. Установка розширення DOM XML. Обробка елементів XML документа за допомогою функцій PHP (отримання значення вузла, атрибута і т.п.) Приклад - використання XML-бази даних в якості альтернативи реляційної СУБД (реалізація адміністративного інтерфейсу каталогу віртуального музею).
PHP (вимовляється пі-ейч-пі) - скриптова мова програмування, створена для генерації HTML-сторінок на веб-сервері і роботи з базами даних. Нині підтримується переважною більшістю представників хостингів. Входить в LAMP - «стандартний» набір для створення веб-сайтів.