foreach xml узел возвращает выбранный элемент

Как я могу получить только выбранное значение из моего тега xml cdata?

Пока с помощью в stackoverflow я могу получить все <b> теги в строке

$result = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA);

foreach ($result->channel->item as $item) {
$desc = $item->description;
$dom = new DOMDocument($desc);
$dom->loadHTML($desc);
$bold_tags = $dom->getElementsByTagName('b');
foreach($bold_tags as $b) {
echo $b->nodeValue . "<br>";
}

но он будет выводить все данные, которые находятся внутри <b>, но я хочу получить только скажем цену.
Я красный в stackoverflow, чтобы использовать ->item(x) чтобы получить это значение, но ничего не работает. Если я скажу это так echo $b->nodeValue->item(2) . "<br>"; или же echo $b->item(2)->nodeValue . "<br>";, Так, где я должен поместить это или что я должен использовать, чтобы получить только <b> элемент с ценой. Цена всегда будет в одном и том же месте.

Вот мои CDATA из ленты:

<a href="//www.ss.lv/msg/lv/real-estate/flats/riga/purvciems/deblb.html">
<img align="right" border="0" src="//i.ss.lv/images/2014-10-01/349288/VHkAHkBlRlo=/1.t.jpg" width="160" height="120" alt="">
</a> District: <b><b>Purvciems</b></b><br />
Street: <b><b>Dudajeva g. 12</b></b><br />
Rooms: <b><b>2</b></b><br />
m2: <b><b>50</b></b><br />
Type: <b><b>LT proj.</b></b><br />
: <b><b>3</b> €</b><br />
Price: <b><b>150</b> €/mēn.</b><br />
<br />
<b><a href="//www.ss.lv/msg/lv/real-estate/flats/riga/purvciems/deblb.html">Apskatīt sludinājumu</a></b><br />
<br />
]]>

0

Решение

Вы можете попробовать этот метод для анализа этих цен:

$url = "http://www.ss.lv/lv/real-estate/flats/riga/hand_over/rss/";
$result = simplexml_load_file($url, 'SimpleXMLElement', LIBXML_NOCDATA);

$data = array();
foreach($result->channel->item as $item) {
$temp = array();

$title = (string) trim($item->title);
$desc = $item->description;

$temp['title'] = $title;

$dom = new DOMDocument('1.0', 'utf-8');
$desc = mb_convert_encoding($desc, 'HTML-ENTITIES', "UTF-8");
$dom->loadHTML($desc);
$xpath = new DOMXpath($dom);
$price_tag = $xpath->query('//text()[contains(., "Cena")]'); // target Cena,
// i didn't know this was PRICE in translation haha
$price = $price_tag->item(0)->nextSibling->nodeValue;
$temp['price'] = $price;
$data[] = $temp ;
}

echo '<pre>';
print_r($data);

Хорошо, для объяснения:

Таким образом, цель состоит в том, чтобы получить те цены, которые находятся в <description> тег внутри CDATA.

Так что каждый <item> узел содержит их, которые выглядят так:

<a href="//www.ss.lv/msg/lv/real-estate/flats/riga/centre/colfo.html">
<img align=right border=0 src="//i.ss.lv/images/2014-08-25/346391/VHkPH0FiQVo=/1.t.jpg" width="160" height="120" alt="">
</a>
Rajons: <b>centrs</b>
<br/>Iela: <b>Rūpniecības 7</b><br/>Ist.: <b>4</b>
<br/>m2: <b>145</b><br/>Sērija: <b>Renov.</b><br/>: <b>10.34 €</b>
<br/>Cena: <b>1,500 €/mēn.</b><br/>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // this one
<br/><b><a href="//www.ss.lv/msg/lv/real-estate/flats/riga/centre/colfo.html">Apskatīt sludinājumu</a></b><br/><br/>

Таким образом, цель с помощью xpath — поиск цен (Cena). Таким образом, в соответствии с разметкой это обычный текстовый узел (не элемент или не тег).

Таким образом, мы нацелены на тот текстовый элемент, который содержит «Cena»:

//text()[contains(., "Cena")]

Таким образом, каждая цена / цена имеет следующий брат <b> теги, которые содержат это конкретное значение, поэтому мы нацеливаемся на каждую цену / цену и указываем на следующего брата, который <b> тег

item(0)->nextSibling->nodeValue
Cena/Price -> nextSibling (which is b tag) -> its value
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector