ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Использование 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