XML-документ используется для хранения небольшого количества данных, и иногда требуется прочитать конкретное содержимое XML-документа на основе значения пути с помощью сценария PHP. Функция xpath() используется для анализа содержимого XML-документа. Эту функцию можно использовать с помощью функции simplexml_load_file() или путем создания объекта класса SimpleXMLElement. Функцию xpath() можно использовать для чтения конкретных значений узлов XML, показанных в этом руководстве.
Синтаксис функции xpath() приведен ниже.
Эта функция имеет один аргумент, который принимает значение пути, и если путь существует в любом узле 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>
Функция xpath() с объектом, созданным функцией simplexml_load_file(), показана в этой части этой статьи.
В следующем примере показано, как прочитать содержимое конкретных значений узлов из 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>”;
?>
В следующем примере показано, как считывать конкретные значения узлов в зависимости от условия с помощью функции 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>”;
?>
В следующем примере показано, как считывать значения конкретных узлов на основе значений атрибутов конкретного узла документа 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>”;
?>
Использование функции xpath() при создании объекта класса SimpleXMLElement было показано в этой части этого руководства.
В следующем примере показано, как читать значения узлов XML-документа, объявленные в переменной, а не в файле. XML-контент хранится в переменной $xml_data. «/ Customers/customer» используется в качестве значения аргумента функции xpath() для чтения всех значений дочерних узлов узла клиента. Затем для каждого цикла используется для печати значений имени узла. «/Customers/customer [@ Department = ‘HR’]» используется в качестве значения аргумента другой функции xpath() для чтения всех значений дочерних узлов узла клиента, где значением атрибута отдела является HR. Далее по a для каждого цикл используется для печати значений узла электронной почты.
<? php
$xml_data = <<<XML
<customers>
<customer
Department = “HR”>
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-документа на основе определенного пути или пути с условием или пути со значением атрибута были объяснены в этом руководстве с использованием нескольких примеров.