PHP XML DOM


Встроенный парсер DOM позволяет обрабатывать XML-документы в PHP.


Что такое DOM?

W3C DOM предоставляет стандартный набор объектов для документов HTML и XML, а также стандартные интерфейсы для доступа к этим документам и управления ими.

W3C DOM делится на различные части (Core, XML и HTML) и различные уровни (DOM Level 1/2/3):

  • Core DOM - определяет стандартный набор объектов для любого структурированного документа
  • XML DOM - определяет стандартный набор объектов для XML-документов
  • HTML DOM - определяет стандартный набор объектов для HTML-документов

Чтобы узнать больше об XML DOM, пожалуйста, посетите нашУчебник по XML DOM。


Разбор XML

Чтобы читать и обновлять — создавать и обрабатывать — XML-документ, вам нужен XML-парсер.

Существуют два основных типа XML-парсеров:

  • Древовидные парсеры: этот тип парсера преобразует XML-документ в древовидную структуру. Он анализирует весь документ и предоставляет доступ к элементам в дереве, таким как Document Object Model (DOM).
  • Парсеры на основе событий: рассматривают XML-документ как последовательность событий. Когда происходит определённое событие, парсер вызывает функцию для его обработки.

DOM-парсер — это древовидный парсер.

Посмотрите на следующий фрагмент XML-документа:

<?xml version="1.0" encoding="ISO-8859-1"?>
<from>Jani</from>

XML DOM рассматривает приведённый выше XML как древовидную структуру:

  • Уровень 1: XML-документ
  • Уровень 2: Корневой элемент: <from>
  • Уровень 3: Текстовый элемент: "Jani"

Установка

Функции DOM XML-парсера являются частью ядра PHP. Для использования этих функций установка не требуется.


XML-файл

В наших примерах будет использоваться следующий XML-файл:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь меня в эти выходные!</body>
</note>


Загрузка и вывод XML

Нам нужно инициализировать XML-парсер, загрузить XML и вывести его:

Пример

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

print $xmlDoc->saveXML();
?>

Приведённый выше код выведет:

ToveJaniНапоминание Не забудь обо мне в эти выходные!

Если вы просмотрите исходный код в окне браузера, вы увидите следующий HTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Напоминание</heading>
<body>Не забудь меня в эти выходные!</body>
</note>

Приведенный выше пример создает объект DOMDocument и загружает XML из "note.xml" в этот объект документа.

Функция saveXML() помещает внутренний XML-документ в строку, поэтому мы можем вывести его.


Обход XML

Мы инициализируем XML-парсер, загрузим XML и обойдем все элементы внутри элемента <note>:

Пример

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
    print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
?>

Приведённый выше код выведет:

#text =
to = Tove
#text =
from = Jani
#text =
heading = Напоминание
#text =
body = Не забудь меня в эти выходные!
#text =

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

Когда XML генерируется, он обычно содержит пробелы между узлами. Парсер XML DOM обрабатывает их как обычные элементы, что иногда может вызывать проблемы, если не обращать на них внимания.


Чтобы узнать больше об XML DOM, пожалуйста, посетите нашУчебник по XML DOM。

Другие расширения