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?
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); ?>
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.
lainaus:
Lisäksi xml-tiedostosi ei ole oikein muodostettu, koska toista item tagia ei suljeta koskaan.
Se on typo. Kiitokset vinkeistä.
Aihe on jo aika vanha, joten et voi enää vastata siihen.