2017-01-31 16 views
0

以下のコードを使用してdescription要素内のimgからsrc属性を取得しようとしています。PHP DOMDocumentを使用して他の要素内の要素から属性を取得する方法

このすべては、これは私が読んでいるのxml estructureある

正しく

$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; 
} 
を進めています。 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)はあなたimg要素の前に閉じているp要素を与えるので、含めることはできません。それ。


はたぶん、あなたは(私のXPath-FUは少しさびている)

/item/description/img/@src 

または類似であなたにsrc属性を与える可能性がある、XPathを検討したいです。ノードと値をフェッチする

+0

少し:-) - [[rss] 'はCSS属性セレクタになります。 '@ src'または' attribute :: src'はXpathの場所パスになります。 – ThW

+0

@ThWリフレッシュしていただきありがとうございます。 :-) –

1

使用XPath式:RSSの説明にしかし

$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); 
} 

は、多くの場合、テキストノードやCDATAセクションとしてHTMLスニペットが含まれています。この場合、それをフラグメントノードにロードし、その上でXpathを使用する必要があります。

関連する問題