2017-01-31 2 views
0

Ich versuche, das Attribut src von img innerhalb des Elements Beschreibung mit dem Code unten zu erhalten.Wie bekomme ich ein Attribut von einem Element innerhalb eines anderen Elements mit PHP DOMDocument

dies korrekt funktioniert

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

All Dies ist xml ESTRUCTURE, die lese ich. Die img ist innerhalb der Ich versuche, die img innerhalb der description Element zu bekommen.

<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> 

Antwort

0

Ich bin nicht ganz sicher, aber ich denke, ist der Fehler mit

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

Die zweiten item(0) gibt Ihnen das das p Element, das vor dem img Elemente geschlossen ist, und kann daher nicht enthalten es.


Vielleicht möchten Sie XPath prüfen, mit dem Sie das src Attribut von

/item/description/img/@src 

oder ähnliches geben könnte (meine XPath-fu ist ein bisschen rostig).

+0

Ein wenig :-) - '[rss]' wäre ein CSS-Attributselektor. '@ src' oder' attribute :: src' wäre der Xpath-Pfad. – ThW

+0

@ThW Vielen Dank für die Auffrischung, aktualisiert. :-) –

1

Verwenden von XPath-Ausdrücken, die die Knoten und Werte zu holen:

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

jedoch in RSS Beschreibung enthält oft einen HTML-Snippet als Textknoten oder CDATA-Abschnitt. In diesem Fall müssten Sie es in einen Fragmentknoten laden und Xpath verwenden.

Verwandte Themen