mukish
Здравствуйте!
Есть feed.xml следующего вида:Код (Text):
<?xml version=’1.0′?> <realty-feed xmlns=»http://webmaster.yandex.ru/schemas/feed/realty/2010-06″> <offer internal-id=»111111″> <category>квартира</category> <rooms-real>1</rooms-real> …. </offer> <offer internal-id=»222222″> <category>квартира</category> <rooms-real>2</rooms-real> …. </offer> <offer internal-id=»333333″> <category>квартира</category> <rooms-real>3</rooms-real> …. </offer> </realty-feed>Элемент offer имеет ещё множество, помимо указанных, элементов.
Пытаюсь вывести все элементы offer, которые содержат элемент rooms-real со значением больше 1:Код (Text):
<?php $xml = simplexml_load_file(«feed.xml»); $xml->registerXPathNamespace(‘r’, ‘http://webmaster.yandex.ru/schemas/feed/realty/2010-06’); $result = $xml->xpath(‘//r:offer[rooms-real>1]’); while(list( , $node) = each($result)) { echo ‘Объект: ‘,$node,»n <br />» ; } ?>В итоге выводит пустую страницу. Подскажите, пожалуйста, где ошибка.
Drunkenmunky
PHP:
$result = $xml->xpath(‘//r:offer[r:rooms-real>1]’);
Drunkenmunky
Кстати, вот это:
тоже непонятно что.
MouseZver
PHP:
foreach ( $result AS [ $_, $node ] ) { … }Смотря что еще в $result
mukish
@Drunkenmunky спасибо, помогло!
Это я так выводил результаты..
@MouseZver спасибо!
На самом деле в конечном счёте стоит такая задача:
На сайте есть форма поиска по базе объектов недвижимости. Данные, введённые в форме (тип недвижимости, количество комнат, цена и т.д.) попадают в переменные.
Необходимо вывести все offer, которые отвечают данным, введённым в форме.Я сделал так (вместо переменных из формы пока указаны просто вымышленные значения):
PHP:
$xml->registerXPathNamespace(‘r’, ‘http://webmaster.yandex.ru/schemas/feed/realty/2010-06’); $result = $xml->xpath(‘//r:offer[r:type[text()=»продажа»] and r:category[text()=»квартира»] and r:rooms-real>2 and r:price/value>1 and r:price/value<10000000000]’); foreach ($result as $offer) {…}Но такой запрос ничего не выводит.
Проблема, я так понимаю, в последних двух условиях в xpath, поскольку если их убираю, то всё ищет и выводит замечательно.Путь до заданного value (в документе есть и другие value) выглядит следующим образом:
HTML:
<?xml version=‘1.0’?> <realty-feed xmlns=«http://webmaster.yandex.ru/schemas/feed/realty/2010-06»> <offer internal-id=«111111»> <price> <value> 12000000 </value> </price> </offer> </realty-feed>Путь надо прописывать иным образом или ошибка в чём-то другом? Подскажите, пожалуйста.
Drunkenmunky
PHP:
$result = $xml->xpath(‘//r:offer[r:type=»продажа» and r:category=»квартира» and r:rooms-real>2 and r:price[r:value>1] and r:price[r:value<10000000000]]’); echo ‘<pre>’;
mukish
Спасибо, работает! Только но не могу понять принцип, во всей документации, которую находил, пути прописываются иначе…
Drunkenmunky
Это да.
С документацией XPath PHP беда.