2009-07-27 20 views
14

Sto provando a leggere un feed RSS da Flickr ma ha alcuni nodi che non sono leggibili da Simple XML (media:thumbnail, flickr:profile e così via).XML semplice: gestire i due punti nei nodi

Come posso aggirare questo? Mi fa male la testa quando guardo la documentazione per il DOM. Quindi vorrei evitarlo perché non voglio imparare.

Sto cercando di ottenere l'anteprima a proposito.

+0

Correlati: [libreria PHP per l'analisi di XML con i due punti nei nomi dei tag?] (Http://stackoverflow.com/q/1575788/367456) – hakre

risposta

18

La soluzione è spiegata in this nice article. È necessario il metodo children() per accedere agli elementi XML che contengono uno spazio dei nomi. Questo snippet di codice è citato all'articolo:

$feed = simplexml_load_file('http://www.sitepoint.com/recent.rdf'); 
foreach ($feed->item as $item) { 
    $ns_dc = $item->children('http://purl.org/dc/elements/1.1/'); 
    echo $ns_dc->date; 
}
+0

Se l'XML aveva questo tag come allora avresti il ​​link? –

+0

@PapaDeBeau Propongo di porre questa domanda a parte. – vog

2

Hai a che fare con uno spazio dei nomi? Penso che tu debba usare il metodo -> children.

$ns_dc = $item->children('http://namespace.org/'); 

Potete fornire uno snippet con la dichiarazione xml?

1

Con l'ultima versione, è ora possibile fare riferimento ai nodi dei due punti con parentesi graffe.

$item->{'itunes:duration'} 
0

Un metodo ancora più semplice utilizzando PHP di accesso al namespace nodi XML senza dichiarando un namespace è ....

Al fine di ottenere il valore di <su:authorEmail> della fonte seguente

<item> 
    <title>My important article</title> 
    <pubDate>Mon, 29 Feb 2017 00:00:00 +0000</pubDate> 
    <link>https://myxmlsource.com/32984</link> 
    <guid>https://myxmlsource.com/32984</guid> 
    <author>Blogs, Jo</author> 
    <su:departments> 
    <su:department>Human Affairs</su:department> 
    </su:departments> 
    <su:authorHash>4f329b923419b3cb2c654d615e22588c</su:authorHash> 
    <su:authorEmail>hIwW14tLc+4l/oo7agmRrcjwe531u+mO/3IG3xe5jMg=</su:authorEmail> 
    <dc:identifier>/32984/Download/0032984-11042.docx</dc:identifier> 
    <dc:format>Journal article</dc:format> 
    <dc:creator>Blogs, Jo</dc:creator> 
    <slash:comments>0</slash:comments> 
</item> 

utilizzare il seguente codice:

$rss = new DOMDocument(); 

$rss->load('https://myxmlsource.com/rss/xml'); 

$nodes = $rss->getElementsByTagName('item'); 

foreach ($nodes as $node) { 
    $title = $node->getElementsByTagName('title')->item(0)->nodeValue; 
    $author = $node->getElementsByTagName('author')->item(0)->nodeValue; 
    $authorHash = $node->getElementsByTagName('authorHash')->item(0)->nodeValue; 
    $department = $node->getElementsByTagName('department')->item(0)->nodeValue; 
    $email = decryptEmail($node->getElementsByTagName('authorEmail')->item(0)->nodeValue); 
} 
Problemi correlati