Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP, XML ja DOM

Danae [11.03.2008 07:40:11]

#

Käsittelyssä on seuraavanlainen xml-dokumentti:

sisalto.xml

<tekstisisalto>
   <sivu1>
      <paaotsikko>Pääotsikko</paaotsikko>
      <teksti>
         <kappale>Teksti1, kappale1</kappale>
      </teksti>
      <valiotsikko>Väliotsikko1</valiotsikko>
      <teksti>
         <kappale>Teksti2, kappale1</kappale>
         <kappale>Teksti2, kappale2</kappale>
      </teksti>
   </sivu1>

Tarkoituksena on hakea sivuille ensin pääotsikko ja sitten järjestyksessä ensimmäisestä tekstistä kappaleet eroteltuna kahdella rivinvaihdolla, väliotsikko ja sen jälkeen taas kappaleet eroteltuna kahdella rivinvaihdolla toisistaan. Väliotsikoiden hakeminen onnistuu seuraavalla koodilla:

<?php
$dom = new DomDocument();
$dom->load(sisalto.xml);
$sisalto = $dom->getElementsByTagName("sivu1");
$valiotsikot = $sisalto->item(0)->getElementsByTagName("valiotsikko");
foreach ($valiotsikot as $node) {
   $votaulu[] = $node->textContent;
}
?>

Idea tässä välissä on, että kun myös tekstit on haettu tauluun $txttaulu[$txtIndex][$kplIndex], niin tekstit ja väliotsikot voidaan tulostaa vuorotellen nettisivuille.

Ongelmana on, etten saa haettua kappaleita yhtään mitenkään. Muunmuassa näin olen sitä yrittänyt:

<?php
$pituus = 0;

$tekstit = $sisalto->item(0)->getElementsByTagName("teksti");
foreach ($tekstit as $teksti) {
   $pituus++;
}
//pituus tulostuu oikein

for ($i = 0; $i < $pituus; $i++) {
   $kappaleet = $tekstit->item($i)->getElementsByTagName("kappale");
   /*
   Tähän asti toimii, mutta ilmeisesti $kappaleet ei saa mitään
   arvoja, koska ohjelma ei mene foreach-silmukkaan
   */

   foreach ($kappaleet as $kpl) {
      $ktaulu[$i][] = $kpl->textContent;
   }
}
?>

Eikö dom, xml tai php hyväksy montaa getElementsByTagName-käskyä peräkkäin? Kahdestihan näitä kuitenkin jo kutsutaan, miksi kolmas tuottaisi ongelmia?

tsuriga [11.03.2008 20:52:46]

#

Testasin noilla antamillasi koodeilla ja kyllä se tonne foreachiin menee, kunhan muistat heittää heittomerkit loadin parametriin ja sulkea tekstisisalto-tagin.

kayttaja-2499 [11.03.2008 21:13:00]

#

Huom, on olemassa myös XLS transformointi. Eli oikeallaisella XSL-style sheetillä voidaan muuntaa haluttu XML-dokumentti esimerkiksi HTML-dokumentiksi.

http://www.w3schools.com/xsl/

En tiedä PHP:lle XLST prosessoria mutta Javalle niitä on useampia kuten Apache Xalan.

Danae [12.03.2008 11:53:45]

#

Tsuriga, mainitsemasi asiat ovat oikein alkuperäisessä koodissa, ensimmäisen viestini koodiin on siinä kohtaa tullut virhe. Homma ei silti minulla toimi. Olisikohan kyse taas jostain palvelimen oikeuksista tms. Pitää siis kokeilla toisella palvelimella. Kiitos testauksesta.

Vastaus

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

Tietoa sivustosta