我试图通过下面的代码从description元素中获取img的属性src。
这一切都正常
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=7; $i++) {
$item_title=$x->item($i)->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$item_link=$x->item($i)->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$item_desc=$x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
// Here is where is the mistake
$item_url_img = $x->item($i)->getElementsByTagName('description')->item(0)->childNodes->item(0)->getElementsByTagName('img')->item(0)->getAttribute('src');
$new = new NewFCB();
$new->link = $item_link;
$new->title = $item_title;
$new->description = $item_desc;
$new->imgUrl = $item_url_img;
$listNews[] = $new;
}
这是我正在阅读的xml estructure。 img
位于{。}}内
我想在img
元素中获取description
。
<item>
<title>Digne, baja por unas molestias en la rodilla</title>
<link>
http://www.sport.es/es/noticias/barca/digne-baja-por-unas-molestias- rodilla-5777073?utm_source=rss-noticias&utm_medium=feed&utm_campaign=barca
</link>
<pubDate>Tue, 31 Jan 2017 13:45:39 +0200</pubDate>
<description>
<p>Lucas Digne no se desplazará con el resto de la plantilla del Barça al Vicente Calderón para la disputa del partido de ida de las semifinales de Copa frente al Atlético Madrid. El defensa francés es baja en la ...</p><a href="http://www.sport.es/es/noticias/barca/digne-baja-por-unas-molestias- rodilla-5777073?utm_source=rss- noticias&utm_medium=feed&utm_campaign=barca">leer la noticia completa</a> <br/>
<img alt="" src="http://estaticos.sport.es/resources/jpg/7/8/jordi-alba-viajara-con-equipo-calderon-1485865523987.jpg"/>
</description>
<guid>
http://www.sport.es/es/noticias/barca/digne-baja-por-unas-molestias- rodilla-5777073?utm_source=rss-noticias&utm_medium=feed&utm_campaign=barca
</guid>
</item>
答案 0 :(得分:1)
使用Xpath表达式获取节点和值:
$document = new DOMDocument();
$document->loadXml($xml);
$xpath = new DOMXpath($document);
foreach ($xpath->evaluate('//item') as $item) {
$row = [
'title' => $xpath->evaluate('string(title)', $item),
'link' => $xpath->evaluate('string(link)', $item),
'description' => $xpath->evaluate('string(description)', $item),
'image-src' => $xpath->evaluate('string(description/img/@src)', $item)
];
var_dump($row);
}
但是在RSS描述中,通常包含HTML片段作为文本节点或cdata部分。在这种情况下,您必须将其加载到片段节点并在其上使用Xpath。
答案 1 :(得分:0)
我不完全确定,但我认为,错误是
->getElementsByTagName('description')->item(0)->childNodes->item(0)->
第二个item(0)
为您提供p
元素,该元素在img
元素之前关闭,因此无法包含它。
也许,您要考虑XPath,它可以通过
为您提供src
属性
/item/description/img/@src
或类似(我的XPath-fu有点生锈)。