Intereting Posts
PHP на GoDaddy Linux Совместно пытается отправить через GMAIL SMTP Где я могу сохранить частичные (представления) в Zend Framework, чтобы быть доступным для всех представлений в моем приложении? Как вызвать хранимую процедуру MySQL из PHP-кода? Предотвращение Laravel добавления нескольких записей в сводную таблицу laravel 4 -> получить имена столбцов Автоматизировать VALUE в зависимости от того, сколько входов содержит форму Метод проверки Zend \ Crypt \ Password \ BCrypt fputcsv и Блокнот Где хранятся глобальные переменные, такие как $ _GLOBAL, $ _POST и т. Д.? рекурсивное регулярное выражение для обработки вложенных строк, заключенных в {| и |} PHP Неустранимая ошибка: вызов неопределенной функции password_verify () Как вычесть две даты, игнорируя переход на летнее время в PHP? Каков наилучший способ форматирования сообщений для очереди? PHP: Получить последнюю цифру года (пример: 2015 == 5) Отобразить подробную группу деталей по имени поставщиков

Запрос 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; } ?> 

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

// лимонад [поставщик = "матери"] / цена

или

// лимонад [ID = "1"] / цена

он не будет работать, никакого вывода вообще. Что я делаю не так?

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

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

или

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

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

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

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

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