2009-07-27 13 views
14

Próbuję odczytać kanał RSS z Flickr, ale ma kilka węzłów, które nie są odczytywane przez Simple XML (media:thumbnail, flickr:profile, i tak dalej).Proste XML - radzenie sobie z dwukropkami w węzłach

Jak to obejść? Boli mnie głowa, kiedy patrzę na dokumentację dla DOM. Chciałbym tego uniknąć, ponieważ nie chcę się uczyć.

Próbuję uzyskać miniaturę przy okazji.

+0

Powiązane: [biblioteka PHP do parsowania XML z dwukropkami w nazwach znaczników?] (Http://stackoverflow.com/q/1575788/367456) – hakre

Odpowiedz

18

Rozwiązanie jest wyjaśnione w this nice article. Potrzebujesz dostępu do elementów XML, które zawierają przestrzeń nazw. Ten fragment kodu jest cytowany z artykułu:

$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

Jeśli XML miał ten tag jak to dostaniesz link? –

+0

@PapaDeBeau Proponuję zadać to jako osobne pytanie. – vog

2

Masz do czynienia z przestrzenią nazw? Myślę, że musisz użyć metody -> children.

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

Czy możesz podać fragment z deklaracją xml?

1

W najnowszej wersji można teraz odwoływać się do węzłów okrężnicy za pomocą nawiasów klamrowych.

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

Jeszcze prostsza metoda PHP dostępu przestrzeni nazw węzłów XML bez uznającej nazw jest ....

W celu uzyskania wartości <su:authorEmail> z następującego źródła

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

Użyj następującego kodu:

$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); 
} 
Powiązane problemy