XPath, вывод конкретных элементов в зависимости от содержимого

mukish

Здравствуйте!
Есть feed.xml следующего вида:

Код (Text):
  1. <?xml version=’1.0′?>
  2. <realty-feed xmlns=»http://webmaster.yandex.ru/schemas/feed/realty/2010-06″>
  3. <offer internal-id=»111111″>
  4. <category>квартира</category>
  5. <rooms-real>1</rooms-real>
  6. ….
  7. </offer>
  8. <offer internal-id=»222222″>
  9. <category>квартира</category>
  10. <rooms-real>2</rooms-real>
  11. ….
  12. </offer>
  13. <offer internal-id=»333333″>
  14. <category>квартира</category>
  15. <rooms-real>3</rooms-real>
  16. ….
  17. </offer>
  18. </realty-feed>

Элемент offer имеет ещё множество, помимо указанных, элементов.
Пытаюсь вывести все элементы offer, которые содержат элемент rooms-real со значением больше 1:

Код (Text):
  1. <?php
  2.  
  3. $xml = simplexml_load_file(«feed.xml»);
  4. $xml->registerXPathNamespace(‘r’, ‘http://webmaster.yandex.ru/schemas/feed/realty/2010-06’);
  5.  
  6. $result = $xml->xpath(‘//r:offer[rooms-real>1]’);
  7.  
  8. while(list( , $node) = each($result)) {
  9.     echo ‘Объект: ‘,$node,»n  <br />» ;
  10. }  
  11.    
  12. ?>

В итоге выводит пустую страницу. Подскажите, пожалуйста, где ошибка.

 

Drunkenmunky

PHP:
  1. $result = $xml->xpath(‘//r:offer[r:rooms-real>1]’);
 

Drunkenmunky

Кстати, вот это:

тоже непонятно что.

 

MouseZver

PHP:
  1. foreach ( $result AS [ $_, $node ] ) { }

Смотря что еще в $result

 

mukish

@Drunkenmunky спасибо, помогло!

Это я так выводил результаты.. :)

@MouseZver спасибо!

На самом деле в конечном счёте стоит такая задача:

На сайте есть форма поиска по базе объектов недвижимости. Данные, введённые в форме (тип недвижимости, количество комнат, цена и т.д.) попадают в переменные.
Необходимо вывести все offer, которые отвечают данным, введённым в форме.

Я сделал так (вместо переменных из формы пока указаны просто вымышленные значения):

PHP:
  1. $xml = simplexml_load_file(«feed.xml»);
  2. $xml->registerXPathNamespace(‘r’, ‘http://webmaster.yandex.ru/schemas/feed/realty/2010-06’);
  3.  
  4. $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]’);
  5.  
  6. foreach ($result as $offer) {}

Но такой запрос ничего не выводит.
Проблема, я так понимаю, в последних двух условиях в xpath, поскольку если их убираю, то всё ищет и выводит замечательно.

Путь до заданного value (в документе есть и другие value) выглядит следующим образом:

HTML:
  1. <?xml version=‘1.0’?>
  2. <realty-feed xmlns=«http://webmaster.yandex.ru/schemas/feed/realty/2010-06»>
  3. <offer internal-id=«111111»>
  4. <price>
  5. <value>
  6. 12000000
  7. </value>
  8. </price>
  9. </offer>
  10. </realty-feed>

Путь надо прописывать иным образом или ошибка в чём-то другом? Подскажите, пожалуйста.

 

Drunkenmunky

PHP:
  1. $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]]’);
  2.  
  3. echo ‘<pre>’;
  4. print_r ($result)
 

mukish

Спасибо, работает! Только но не могу понять принцип, во всей документации, которую находил, пути прописываются иначе…

 

Drunkenmunky

Это да.
С документацией XPath PHP беда.

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *