Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: XML ja PHP - menee yli hilseen

Triskal [11.02.2009 16:23:29]

#

Let's say, että meillä on XML-filu. Tämmöinen:

<?xml version="1.0" ?>
<root>
  --> Tähän näin uusi item-kokonaisuus. <--
  <item>
    <foo>foo</foo>
    <bar>bar></bar>
  </item>
  <item>
    <foo>laa</foo>
    <bar>böö</bar>
  <item>
</root>

Tahdon lisätä rootin sisään uuden item-kokonaisuuden merkkaamaani paikkaan. Olen jo edennyt hiustenrepimisvaiheeseen PHP:n XML-luokkien kanssa. Tää ois periaatteessa tosi helppoa, jos javascript-logiikka pätisi, eli insertBefore("ja merkkijonona vaan kaikki, mitä sinne haluaa ängetä.")

Mutta kun ei.

Onko joku painiskellut tämmöisten kanssa ja onko ratkaisua löytynyt? Vai pitääkö todeta PHP:n XML-luokat käyttökelvottomiksi?

Metabolix [11.02.2009 16:39:41]

#

lainaus:

insertBefore("ja merkkijonona vaan kaikki, mitä sinne haluaa ängetä.")

Valaisisitko, missä noin voi tehdä? Itse olen tietoinen vain kutsusta parent_node.insertBefore(new_child_node, existing_child_node). Aivan samalla tavalla toimii myös PHP:n DOM-kirjasto.

<?php
// Lisätään alkuun
$node = $parent->insertBefore($node, $parent->firstChild);
?>

Teuro [11.02.2009 17:18:30]

#

Triskal kirjoitti:

Onko joku painiskellut tämmöisten kanssa ja onko ratkaisua löytynyt? Vai pitääkö todeta PHP:n XML-luokat käyttökelvottomiksi?

Olen paininut joskus kun en tajunnut ollenkaan tuota ideaa, mutta ei ne käyttökelvottomia ole ollenkaan. metabolix antoikin jo varsin maukkaan esimerkin tuon insertBeforen käytöstä, mutta tuskin toinen mitään haittaa.

<?php
$tiedosto = new Domdocument("1.0", "ISO-8859-1");
$tiedosto -> load( "foo.xml" );

/* Luodaan uusi item solmu */
$item = $tiedosto -> createElement( "item" );
/* Luodaa uusi foo solmu */
$foo = $tiedosto -> createElement( "foo", "jotain" );
/* Luodaan uusi bar solmu */
$bar = $tiedosto -> createElement( "bar", "ihan muuta" );

/* Liimataan foo ja bar itemiin */
$item -> appendChild( $foo );
$item -> appendChild( $bar );

/* Lopuksi liimataan item ensimmäisen solmun jälkeen (siis ennen toista solmua) muuttamalla 1:n nollaksi menisi solmu tiedoston ensimmäiseksi item solmuksi.*/
$toka = $tiedosto -> getElementsByTagName( "item" ) -> item( 1 );

$toka -> parentNode -> insertBefore($item, $toka);

echo $tiedosto -> saveXML();

?>

Lisäksi xml-tiedostosi ei ole oikein muodostettu, koska toista item tagia ei suljeta koskaan. Siitä aiheutuu myös virhe tulkin puolelta.

Triskal [11.02.2009 19:40:32]

#

lainaus:

Lisäksi xml-tiedostosi ei ole oikein muodostettu, koska toista item tagia ei suljeta koskaan.

Se on typo. Kiitokset vinkeistä.

Vastaus

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

Tietoa sivustosta