PHP SimpleXML — получение значений узлов/атрибутов
К настоящему времени вы понимаете, что такое парсер PHP и как читать XML-файлы с его помощью. Вы также узнали о парсере SimpleXML более подробно. В этом уроке мы углубим знания о SimpleXML и о том, как успешно читать файлы XML.
Древовидная структура документа состоит из узлов. Следуя метафоре дерева, вы могли бы назвать их ветвями. Элемент — это тип узла. То же самое и с атрибутом, который не считается дочерним элементом элемента, хотя и содержит информацию о нем. Эти данные заключены в кавычки, что делает их строкой.
Используя примеры кода PHP XML, мы покажем вам, как получить значения узлов и атрибутов. Для этого мы будем использовать функцию PHP simplexml_load_file()
.
Как читать файлы XML
- SimpleXML - это анализатор на основе дерева. Структура данных дерева состоит из узлов.
- Вы можете получить доступ к значениям узла и атрибута с помощью SimpleXML.
- Для этого вы должны понимать использование функции PHP
simplexml_load_file
.
Давайте посмотрим на один из наших XML-документов, который называется books.xml. В нем перечислены три категории книг. В каждой категории есть одна книга, и информация о конкретной книге состоит из ее названия, автора, цены, языка и года выпуска:
Пример
Скопировать<?xml version="1.0" encoding="utf-8"?>
<books>
<book category="COOK">
<name lang="en">The Silver Spoon</name>
<by>Cielia D`Onofrio</by>
<released>1950</released>
<pricing>35.00</pricing>
</book>
<book category="FANTASY">
<name lang="en">The Fellowship of the Ring</name>
<by>J.R.R. Tolkien</by>
<released>1954</released>
<pricing>39.99</pricing>
</book>
<book category="TECH">
<name lang="en-us">Think like a programmer</name>
<by>V. Anton Spraul</by>
<released>2012</released>
<pricing>39.99</pricing>
</book>
</books>
Тщательно проанализируйте его, поскольку мы будем использовать этот файл, чтобы объяснить, как читать файлы XML.
Получить значение узла из определенного элемента
Допустим, мы хотим вернуть названия первых двух книг. Код, который вы видите ниже, получает значения <name> элементов нужных нам книг из файла books.xml:
Пример
Попробуй сам »<?php
$xml = simplexml_load_file('books.xml') or die('Не удалось создать объект');
echo $xml->book[0]->name . "<br>";
echo $xml->book[1]->name;
?>
Результат выполнения кода:
The Fellowship of the Ring
Цикл для получения значений
Теперь, если мы хотим получить значение узла каждого элемента, мы можем использовать циклы. Посмотрим на код ниже. По сути, он перебирает каждый элемент <book>
в нашем XML-документе, получая значение узла для каждого элемента:
Пример
Попробуй сам »<?php
$xml = simplexml_load_file('books.xml') or die('Не удалось создать объект');
foreach($xml->children() as $books) {
echo $books->name . ", ";
echo $books->by . ", ";
echo $books->released . ", ";
echo $books->pricing . "<br>";
}
?>
Результат выполнения кода:
The Fellowship of the Ring, J.R.R. Tolkien, 1954, 39.99
Think like a programmer, V. Anton Spraul, 2012, 39.99
PHP SimpleXML: получение значений атрибутов
А теперь попробуем что-нибудь посложнее. Пример кода, который представлен ниже, получит значение атрибута category
из первого найденного элемента <book>
. Затем он получит значение атрибута lang
из элемента <name>
второго элемента <book>
:
Пример
Попробуй сам »<?php
$xml = simplexml_load_file('books.xml') or die('Не удалось создать объект');
echo $xml->book[0]['category'] . "<br>";
echo $xml->book[1]->name['lang'];
?>
Результат выполнения кода:
en
Цикл для получения значений атрибутов
В приведенном ниже примере PHP XML показан сценарий, который выполняет итерацию по каждому элементу <name>
в нашем файле books.xml и получает значения их атрибутов:
Пример
Попробуй сам »<?php
$xml = simplexml_load_file('books.xml') or die('Не удалось создать объект');
foreach($xml->children() as $books) {
echo $books->name['lang'];
echo "<br>";
}
?>
Результат выполнения кода:
en
en-us
Как читать файлы XML: Резюме
- Расширение PHP
SimpleXML
позволяет кодировщику читать XML-документы PHP, обращаться к ним и использовать их как структуры данных, состоящие из узлов. SimpleXML
также позволяет получать значения узла и атрибута. Для этого мы используем функцию PHPsimplexml_load_file
.