Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: DOMDocument

peg [05.03.2010 08:44:02]

#

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.

trilog [05.03.2010 09:13:27]

#

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.

peg [05.03.2010 17:52:50]

#

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

kilppari [06.03.2010 15:50:02]

#

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.

peg [06.03.2010 20:06:58]

#

Kiitos, täytyypä huvikseni katsoa tuota (simple api for xml) myös.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta