Парсер PHP XML DOM
Библиотека PHP DOM позволяет вам управлять HTML и XML после загрузки вашего скрипта в новый PHP DOMDocument. Синтаксический анализ - важная концепция, относящаяся к преобразованию исходного кода в более удобный для чтения формат.
Для чтения и изменения HTML и XML лучше всего подходит библиотека DOM, поскольку она автоматически создается вместе с некоторыми версиями PHP.
Парсер XML DOM
Парсер Dom очень хорошо справляется как с XML, так и с HTML-документами. Парсер XML DOM является встроенным в PHP.
DOM - это анализатор на основе дерева (в отличие от анализаторов XML на основе событий).
Парсер Dom перемещается на основе дерева, а перед доступом к данным он загружает данные в объект dom и обновляет данные в веб-браузере.
XML-данные: пример древовидной структуры
Чтобы понять, как DOM просматривает XML-данные, давайте проанализируем следующий пример кода:
Пример
Скопировать$my_data =
"<?xml version='1.0' encoding='UTF-8'?>
<from>Me</from>
Данные XML, с точки зрения DOM, имеют древовидную структуру:
- Сам XML-документ относится к уровню 1.
- Корневой элемент
<from>
относится к уровня 2. - Текстовый элемент
Me
- это уровень 3.
Свойства DOMDocument
Следующие свойства могут помочь вам найти информацию о вашем XML-документе:
Свойство | Описание |
---|---|
actualEncoding | Не рекомендуется. Это свойство только для чтения, представляющее кодировку документа. |
config | Не рекомендуется. Когда вызывается DOMDocument :: normalizeDocument (), применяется это свойство конфигурации. |
doctype | Представляет объявление типа документа, связанное с документом. |
documentElement | Предоставляет прямой доступ к дочерним узлам в документе. |
documentURI | Представляет расположение документа. Возвращает NULL, если местоположение не найдено. |
encoding | Представляет кодировку документа, указанную в объявлении XML. |
formatOutput | Помогает организовать вывод с необходимыми пробелами и отступами. |
implementation | Представляет объект DOMImplementation, который управляет документом. |
preserveWhiteSpace | Указывает не удалять лишние пробелы. |
recover | Собственный. Включает режим восстановления. Этот атрибут взят не из документации DOM, а из libxml. |
resolveExternals | Если установлено значение TRUE, этот атрибут загружает внешние сущности из объявления doctype. Это удобно для добавления символов в документы XML. |
standalone | Не рекомендуется. Указывает, является ли документ автономным. То же, что xmlStandalone. |
strictErrorChecking | Отображает DOMException при обнаружении ошибок. |
replaceEntities | Собственный. Указывает, следует ли заменять объекты. Он не является частью спецификации DOM и является уникальным для libxml. |
validateOnParse | Используется для загрузки и проверки на соответствие DTD. |
version | Не рекомендуется. Представляет версию XML. То же, что и xmlVersion. |
xmlEncoding | Указывает кодировку XML-документа. NULL, если кодировка не найдена. |
xmlStandalone | Указывает, является ли XML-документ автономным. FALSE, если эта информация не найдена. |
xmlVersion | Указывает номер версии XML-документа. Если объявление не найдено, но документ поддерживает XML, версия 1.0. |
XML-файл
Приведенный ниже XML-файл file.xml будет использоваться в нашем примере:
Пример
Скопировать<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>You</to>
<from>Me</from>
<heading>The Game</heading>
<body>You lost it.</body>
</note>
Как загрузить и вывести данные XML
Ниже приведен сценарий, который нам нужно будет использовать для инициализации анализатора XML:
Пример
Скопировать<?php
$xml_doc = new DOMDocument();
$xml_doc->load('file.xml');
print $xml_doc->saveXML();
?>
Результат выполнения кода:
Вот шаги этого примера кода:
- Мы создаем новый документ XML DOM.
- Затем мы используем функцию
load
для загрузки данных XML в объект. - И, наконец, мы печатаем информацию из созданного нами XML DOMDocument.
Примечание: Используя функцию saveXML(), мы помещаем внутренние данные XML в строку данных. После этого он будет готов к отображению.
Если вы выберете в окне браузера «Просмотр исходного кода», то увидите следующий HTML-код:
<?xml version="1.0" encoding="UTF-8"?> <note> <to>You</to> <from>Me</from> <heading>The Game</heading> <body>You lost it.</body> </note>
В приведенном выше примере создается объект DOMDocument и загружается в него XML из файла note.xml.
Затем функция saveXML()
помещает внутренний XML-документ в строку, чтобы мы могли его вывести.
Выполнение циклов в файлах XML
Чтобы инициализировать синтаксический анализатор PHP XML, получить доступ к данным и затем выполнить итерацию, вы должны применить цикл foreach:
Пример
Скопировать<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("file.xml");
$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item) {
print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
?>
В этом примере кода выполняются те же шаги: создается новый документ XML DOM, содержащий данные из файла file.xml. Затем мы подаем заявку foreach
на печать nodeName
и nodeValue
.
Вот результат, который мы получаем в таком случае:
from = Me
#text =
to = You
#text =
heading = The Game
#text =
body = You lost it
#text =
Примечание: Обратите внимание, что в нашем примере между каждым элементом есть пустые текстовые узлы. Когда создается XML, он часто содержит пробелы между узлами. Парсер XML DOM рассматривает их как обычные элементы, и если вы о них не знаете, они иногда вызывают проблемы.
Как создать документ PHP DOMDocument, содержащий HTML
Давайте научимся создавать PHP DOMDocuments для изменения HTML-скрипта. В следующем примере кода показано, как создать документ PHP DOMDocument, содержащий HTML:
Пример
Скопировать<?php
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Example<br></body></html>");
echo $doc->saveHTML();
?>
PHP DOMDocument: Резюме
- Используя библиотеку DOM, вы можете обрабатывать как XML-документы так и HTML.
- DOM (Document Object Model) означает объектная модель документа и относится к древовидным анализаторам XML. Этот метод позволяет вам производить любые операции с XML-данными в очень удобной форме - представляя XML-документ как дерево объектов.
- Функции парсера DOM являются частью ядра PHP. Для использования этих функций установка не требуется.
- Способы использования API-интерфейса DOM зависят от поставленных целей, но чаще всего требуется выполнить описанные ниже действия:
- Открыть новый документ DOM XML или прочитать его, поместив в оперативную память.
- Выполнить манипуляции с документом на уровне узлов.
- Вывести результирующий документ XML в виде строки или записать его в файл. Эта операция приводит также к освобождению памяти, используемой синтаксическим анализатором.