Запрос XPath с PHP

Вот XML-код, с которым я работаю:

<inventory>
    <drink>
        <lemonade supplier = "mother" id = "1">
            <price>$2.50</price>
            <amount>20</amount>
        </lemonade>
        <lemonade supplier = "mike" id = "4">
            <price>$3.00</price>
            <amount>20</amount>
        </lemonade>
        <pop supplier = "store" id = "2">
            <price>$1.50</price>
            <amount>10</amount>
        </pop>
    </drink>
</inventory>

Затем я написал простой код, чтобы попрактиковаться в работе с XPath:

<?php
    $xmldoc = new DOMDocument();
    $xmldoc->load('sample.xml');

    $xpathvar = new Domxpath($xmldoc);

    $queryResult = $xpathvar->query('//lemonade/price');
    foreach($queryResult as $result) {
        echo $result->textContent;
    }
?>

Этот код работает хорошо, выводя все значения цены лимонада, как и ожидалось. Теперь, когда я изменяю строку запроса, чтобы выбрать только элементы с атрибутом, установленным на определенное значение, например

//lemonade[supplier = "mother"]/price

или же

//lemonade[id = "1"]/price

это не сработает, выхода нет вообще. Что я делаю не так?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
18
0
39 142
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Попробуй это:

//lemonade[@id = "1"]/price

или же

//lemonade[@supplier = "mother"]/price

Без «@» он ищет дочерние элементы с таким именем вместо атрибутов.

вы должны использовать знак @, чтобы указать атрибут в предикате, например: //lemonade[@supplier = "mother"]/price, вот и все.

Это связано только косвенно, но когда вы используете XPath для документа, структура которого вам известна, не использует «// имя-элемента». Это очень хорошо для быстрого примера, но когда вы обращаетесь к огромному XML-файлу с этим запросом, особенно если за ним следует что-то сложное, вы быстро столкнетесь с проблемами производительности.

инвентарь / напиток / лимонад [@ supplier = "mother"] / цена

Другие вопросы по теме