[PHP]RISOLTO: Parsing xml nodi con caratteri speciali

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
Ciao a tutti,
ho un piccolo problema con il parsing di un xml da youtube
questo e' la parte di codice da cui estrarre i dati che mi interessano:

Codice:
<entry>
<id></id>
<yt:videoId></yt:videoId>
<yt:channelId></yt:channelId>
<title></title>
<link rel="alternate" href="http://www.youtube.com"/>
<author>
<name></name>
<uri></uri>
</author>
<published></published>
<updated></updated>
<media:group>
<media:title></media:title>
<media:content url="https://www.youtube.com" type="application/x-shockwave-flash" width="640" height="390"/>
<media:thumbnail url="https://i.jpg" width="480" height="360"/>
<media:description></media:description>
<media:community>
<media:starRating count="0" average="0.00" min="1" max="5"/>
<media:statistics views=""/>
</media:community>
</media:group>
</entry>
come potete notare alcuni child/nodi hanno un nome che include i 2 punti ad esempio 'media:description' e questo mi crea un errore di parsing nel codice php che scrivo per l'estrazione del contenuto di quel nodo che e' il seguente:

PHP:
$marvelvideosxml=simplexml_load_file('https://www.youtube.com/feeds/videos.xml?channel_id=jkujgigikljhlk') or die('Error: Cannot create object');
echo '<ul class="list-array">';
foreach($marvelvideosxml->children() as $videos){
    $video_title = $videos->media:title;
    echo '<li class="list-item">';
    echo $video_title;
    echo '</li>';
}
echo '</ul>';
Inoltre ho provato ad utilizzare 'xpath' per estrarre solo alcuni nodi ma sembra non funzionare.
qualche anima buona che mi puo aiutare?
 

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
Alla fine ho risolto con xpath e un piccolo array multidimensionale lascio qui il codice nel caso potesse essere utile a qualcuno

PHP:
$youtbe_xml=simplexml_load_file('https://www.youtube.com/feeds/videos.xml?channel_id=id_canale') or die('Error: Cannot create object');


$video_title = $youtbe_xml->xpath('//media:title');
$video_url = $youtbe_xml->xpath('//yt:videoId');
$i_max = count($video_title);

$video = array($video_title, $video_url);

echo "<ul>";
  for ($i = 0; $i < $i_max; $i++) {
    echo "<li>".$video[0][$i]."</li>";
    echo '<li><iframe width="400" height="225" src="https://www.youtube.com/embed/'.$video[1][$i].'" frameborder="0"></iframe></li>';
  }
  echo "</ul>";