ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Использование xpath() в PHP

Полный список функций файловой системы PHP 5

XML-документ используется для хранения небольшого количества данных, и иногда требуется прочитать конкретное содержимое XML-документа на основе значения пути с помощью сценария PHP. Функция xpath() используется для анализа содержимого XML-документа. Эту функцию можно использовать с помощью функции simplexml_load_file() или путем создания объекта класса SimpleXMLElement. Функцию xpath() можно использовать для чтения конкретных значений узлов XML, показанных в этом руководстве.

 

Синтаксис:

Синтаксис функции xpath() приведен ниже.

array xpath(string $path)

 

Эта функция имеет один аргумент, который принимает значение пути, и если путь существует в любом узле XML-документа, то значение узла будет возвращено в виде массива. Различные варианты использования этой функции описаны в следующей части этой статьи.

 

Создать XML-документ:

Создайте файл XML с именем products.xml со следующим содержимым в том месте, где будет создан файл PHP для анализа этого файла.

<?xml version = «1.0» ?>

<PRODUCTS>

<PRODUCT category = «Monitor»>
<ID> MN-56345 </ID>
<BRAND> DELL </BRAND>
<NAME> 15- дюймовый монитор Dell </NAME>
<PRICE> 700 </PRICE>
</PRODUCT>

<
<ID> HD-34278 </ID>
<BRAND> SAMSUNG </BRAND>
<NAME> 1 ТБ Samsung HDD </NAME>
<PRICE> 520 </PRICE>
</PRODUCT>

<PRODUCT category = «Mouse»>
<ID> MS-67457 </ID>
<BRAND>Logitech </BRAND>
<NAME> Беспроводная мышь Logitech </NAME>
<PRICE> 100 </PRICE>
</PRODUCT>

<PRODUCT category = «Monitor»>
<ID> MN-76453 </ID>
<BRAND> HP </BRAND>
<NAME> 14- дюймовый монитор HP </NAME>
<PRICE> 750</PRICE>
</PRODUCT></PRODUCTS>

Использование функции simplexml_load_file():

Функция xpath() с объектом, созданным функцией simplexml_load_file(), показана в этой части этой статьи.

 

Пример-1: чтение определенных значений узла XML

В следующем примере показано, как прочитать содержимое конкретных значений узлов из XML-документа путем определения пути к функции xpath(). Переменная объекта $xml создается для чтения конкретных значений узлов файла products.xml. ‘/PRODUCTS/PRODUCT/BRAND’ используется в xpath() для чтения всех значений узла BRAND. ‘/PRODUCTS/PRODUCT’ используется в xpath() для чтения значений всех дочерних узлов узлов PRODUCT. Цикл foreach используется для печати значений узлов NAME и PRICE.

<? php

// Создаем объект для чтения XML-файла
$xml = simplexml_load_file(‘products.xml’);
// Поиск всех значений узлов BRAND
$brand = $xml -> xpath(‘/PRODUCTS/PRODUCT/BRAND’);
// Распечатываем значения массива
echo «<h3> Список торговых марок: </h3>»;
foreach ($brand as $name) {
echo » $name <br/>»;
}

// Поиск по всем значениям узлов PRODUCT
$products = $xml ->xpath ( ‘/PRODUCTS/PRODUCT’ );
echo «<h3> Список наименований товаров и цен: </h3>»;
echo «<table>»;
echo «<tr> <th align = ‘left’> Имя </th> <th> Цена </th> </tr>»;
// Распечатываем значения массива
foreach($products as $product) {
echo «<tr> <td> $product-> NAME </td> <td> $product->PRICE </td> </tr>»;
}
echo «</table>»;
?>

Пример-2: чтение конкретных значений узла XML в зависимости от условия

В следующем примере показано, как считывать конкретные значения узлов в зависимости от условия с помощью функции xpath(). Значение пути ‘/ PRODUCTS/PRODUCT[PRICE> 600]’ будет искать значения всех дочерних узлов узла PRODUCT, где значение узла PRICE больше 600. Цикл foreach используется для вывода значений NAME и PRICE. узлы.

<?php

// Создаем объект для чтения XML-файла
$xml = simplexml_load_file(‘products.xml’);
// Поиск товаров, цена которых превышает 600
$products = $xml->xpath(‘/ PRODUCTS/PRODUCT [PRICE> 600]’);
echo «<h3> Список наименований товаров и цен, если цена больше 600: </h3>»;
echo «<table>»;
echo «<tr> <th align = ‘left’> Имя </th> <th> Цена </th> </tr>»;

{
echo «<tr> <td> $product->NAME </td> <td> $product->PRICE </td> </tr>»;
}
echo «</table>»;
?>

Пример-3: чтение конкретных значений узла XML на основе атрибута

В следующем примере показано, как считывать значения конкретных узлов на основе значений атрибутов конкретного узла документа XML с помощью функции xpath(). Значение пути ‘/PRODUCTS/PRODUCT[@category = ”Monitor”]’ будет искать значения всех дочерних узлов узла PRODUCT , где значением атрибута категории является Monitor. Цикл foreach используется для печати значений узлов BRAND, NAME и PRICE.

<? php

// Создаем объект для чтения XML-файла
$xml = simplexml_load_file(‘products.xml’);
// Поиск продуктов, для которых значение атрибута çategory равно ‘Monitor’
$products = $xml->xpath(‘/ PRODUCTS/PRODUCT[@category = «Monitor»]’);
echo «<h3> Список торговых марок, названий и цен товаров по категории (Монитор): </h3>»;
echo «<table>»;
echo «<tr> <th align = ‘left’> Бренд </th> <th align = ‘left’> Имя </th> <th> Цена </th> </tr>»;
// Распечатать значения массива
foreach($products as $product) {
echo «<tr> <td> $product-> BRAND </td> <td> $product-> NAME </td> <td> $product-> PRICE </td> </tr>»;
}
echo «</table>»;
?>

Использование класса SimpleXMLElement :

Использование функции xpath() при создании объекта класса SimpleXMLElement было показано в этой части этого руководства.

 

Пример-4: Использование xpath() путем определения содержимого XML в переменной

В следующем примере показано, как читать значения узлов XML-документа, объявленные в переменной, а не в файле. XML-контент хранится в переменной $xml_data. «/ Customers/customer» используется в качестве значения аргумента функции xpath() для чтения всех значений дочерних узлов узла клиента. Затем для каждого цикла используется для печати значений имени узла. «/Customers/customer [@ Department = ‘HR’]» используется в качестве значения аргумента другой функции xpath() для чтения всех значений дочерних узлов узла клиента, где значением атрибута отдела является HR. Далее по a для каждого цикл используется для печати значений узла электронной почты.

<? php

$xml_data = <<<XML
<customers>
<customer
Department = «HR»>

<name> Mr. andreyex </name>
<email> andreyex@mail.ru </email>
</customer>
<customer Department = «Sales»>
<name> Destroyer Max </name>
<email> destroyer@mail.ru </email>
</customer>
</customers>

XML;

// Определение объекта для чтения XML-данных
$xml = new SimpleXMLElement($xml_data);
// Определяем путь для чтения всех данных
$customers = $xml->xpath(«/customers/customer»);

// Выводим имена клиентов
echo «<h3> Список имен клиентов: </h3>»;
foreach($customers as $customer) {
echo «$customer-> name <br/>»;
}

// Определяем путь для чтения всех данных о клиентах отдела кадров
$customers = $xml->xpath(«/customers/customer [@Department = ‘HR’]»);

// Распечатать электронную почту клиентов
echo «<h3> Электронная почта клиента отдела кадров: </h3>»;
) {
echo «$customer->email <br/>»;
}
?>

Заключение:

Два разных способа использования функции xpath() для чтения значений узлов XML-документа на основе определенного пути или пути с условием или пути со значением атрибута были объяснены в этом руководстве с использованием нескольких примеров.

Exit mobile version