2017-01-31 18 views
0

Я пытаюсь получить атрибут src из img внутри элемента описания с приведенным ниже кодом.Как получить атрибут из элемента внутри другого элемента с помощью PHP DOMDocument

Все это правильно

$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&#160;no se desplazará con el resto de la plantilla  del&#160;Barça&#160;al&#160;Vicente Calderón&#160;para la disputa del partido  de ida de las semifinales de&#160;Copa&#160;frente al&#160;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

Я не совсем уверен, но я думаю, ошибка с

->getElementsByTagName('description')->item(0)->childNodes->item(0)-> 

Второй item(0) дает вам p элемент, который закрыт до img элемента, и, следовательно, не может включать в себя Это.


Может быть, вы хотите рассмотреть XPath, которые могли бы дать вам атрибут src по

/item/description/img/@src 

или аналогичный (мой XPath-фу является немного ржавый).

+0

Немного :-) - '[rss]' будет селектором атрибутов CSS. '@ src' или' attribute :: src' будет путь к пути Xpath. – ThW

+0

@ThW Спасибо за обновленный, обновленный. :-) –

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.