@aljo222
В процессе обучения веб-разработке

Как получить значение XML-элемент по атрибуту?

Здравствуйте!
Есть XML-фид с кучей сущностей offer. Внутри каждого offer может быть множество изображений, но мне нужно только то, у которого есть атрибут tag со значением plan.
<offer internal-id="11262554">
  <price>
   <value>4956910</value>
   <currency>RUB</currency>
 </price>
 <area>
   <value>37.27</value>
   <unit>кв. м</unit>
 </area>
 <image tag="plan">https://site.com/assets/aksdjasdj.jpg</image>
 <image tag="plan floor">https://site.com/assets/56456sdfdsf.jpg</image>
 <image>https://site.com/assets/re345312asd.jpg</image>
</offer>


Сейчас код следующий, но не понимаю, почему не получаю изображение:
$reader = new XMLReader();
$reader->open($path_to_xml);
if (!$reader) {
    print_r('error');
    return;
}
while($reader->read()) {
    if($reader->nodeType == XMLReader::ELEMENT and $reader->name == 'offer') {
        $xml = new SimpleXMLElement($reader->readOuterXML());
        
        $temp = array();
        $temp['rooms'] = (string)$xml->rooms;
        $temp['price'] = (float)$xml->price->value;
        $temp['total_square'] = (float)$xml->area->value;
        $temp['living_square'] = (float)$xml->{"living-space"}->value;
        $temp['kitchen_square'] = (float)$xml->{"kitchen-space"}->value;
        $temp['image'] = $xml->xpath('/image[@tag="plan"]');
        print_r($temp);
        break;
        //$reader->next(); 
    }
}
  • Вопрос задан
  • 25 просмотров
Решения вопроса 1
IvanU7n
@IvanU7n
ЕМНИП корень это DomDocument, а не корневой элемент
-        $temp['image'] = $xml->xpath('/image[@tag="plan"]');
+        $temp['image'] = $xml->xpath('//image[@tag="plan"]');
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы