Hei !
DOMDocument ei ole lainkaan tuttu.
$time = $sivu->getElementsByTagName("pubDate");
Miten saan haettua pubDatet jotka ovat tagien kalenteri tai
ajanvaraus sisällä ja muita pubdateja ei haeta.
Toinen ongelma, kaupalliset sovellukset laittaa paljon turhaa xml documentin
alkuun. Olen kiinostunut kuitenkin vain niistä riveistä jotka ovat siellä
itemeissä. Eli miten sivu ladataan niin että se alkaisi ekasta ja loppuisi
vikaan itemiin.
Hae ensin kalenteri- tai ajanvarauselementti ja siitä elementistä haet ajat.
Haettaessa tietoja ulkopuolisista lähteistä, joudut lataamaan koko dokumentin muistiin tai käymällä dokumenttia läpi kunnes pyydetty elementti tulee vastaan.
Teen sen nyt näin, mutta miten se pitäisi tehdä.
<?php $sivu = new DOMDocument("1.0", "UTF-8"); $sivu->load("http://www.tietokone.fi/feed/rss/uutiset"); $linkit = $sivu->getElementsByTagName("title"); $link = $sivu->getElementsByTagName("link"); $time = $sivu->getElementsByTagName("pubDate"); for($i = 1; $i < $linkit->length; ++$i){ $ulinkit .= strtotime($time->item($i)->textContent) . '<a href="' . $link->item($i)->textContent . '">'.$linkit->item($i)->textContent.'</a><br />'; } echo $ulinkit; ?>
Mod. lisäsi kooditagit
Jos tosiaan haluat vain <item> elementtien sisäiset tiedot, täytyy ensin hakea item-elementit, joiden sisältä sitten parsia linkkien, otsikoiden ja päivämäärien tiedot. DOM lataa xml-tiedoston aina kokonaan kerralla muistiin. Eli kun haet elementtejä nimen perusteella, DOM hakee solmulistan, joka sisältää kaikki haun määräämät elementit ja kaikki niiden lapsielementit.
Mainitsemassasi tapauksessa voit hakea itemien tiedot seuraavasti:
<?php $items = $sivu->getElementsByTagName("item"); //haetaan item-solmulista //käydään solmulistasta läpi jokainen elementtipari <item>...</item> erikseen: foreach($items as $item){ $time = $item->getElementsByTagName("pubDate"); $link = $item->getElementsByTagName("link"); $title = $item->getElementsByTagName("title"); $links .= strtotime($time->item(0)->textContent) . '<a href="' . $link->item(0)->textContent . '">'.$title->item(0)->textContent.'</a><br />'; }?>
Jos koko tiedoston lataaminen muistiin häiritsee, niin vaihtoehtoinen parseri on esim. SAX (simple api for xml), joka parsii tiedostoa sitä mukaa kun lukee.
Kiitos, täytyypä huvikseni katsoa tuota (simple api for xml) myös.
Aihe on jo aika vanha, joten et voi enää vastata siihen.