php dom function

Programovacie jazyky, rady, poradňa...
javo
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 15 sep 2006, 21:30
Kontaktovať používateľa:

php dom function

Príspevok od používateľa javo »

zdravim, pokusam sa vytvorit xml guestbook,
nemam vacssie problemy az na jeden, myslim ze je zbytocne to riesit ked sa tu mozno najde niekto kto uz ma skusenosti :)

mam XML dokument asi takyto

Kód: Vybrať všetko

<msgs>
<msg>
<name>meno</name>
<mail>[email protected]</mail>
<text>lalalalalalallaa</text>
</msg>
<msg /> ........
</msgs>
pridavanie na koniec cez appendchild(); nie je vobec prakticke cize by som chcel pridat dany coment hned na zaciatok ako prvy prvok v korenovom <msgs>

no tu sa stretavam s problemom,
myslel som ze to pojde takto

Kód: Vybrať všetko

  $doc = new DOMDocument();
$doc->load('guestbook.xml');
    

  $parent = $doc->createElement( "msg" );
  
  $author = $doc->createElement( "name" );
  $author->appendChild(
  $doc->createTextNode( $comment[0] )
  );
  $parent->appendChild( $author );
  
  $title = $doc->createElement( "mail" );
  $title->appendChild(
  $doc->createTextNode( $comment[1] )
  );
  $parent->appendChild( $title );
  
  $publisher = $doc->createElement( "text" );
  $publisher->appendChild(
  $doc->createTextNode( $comment[2] )
  );
  $parent->appendChild( $publisher );

//$doc->documentElement->appendChild($parent);
$elements=$doc->get_elements_by_tagname("msg");
$doc->documentElement->insert_before($elements,$parent);
$doc->save('guestbook.xml');
ale vypisuje chybu

Fatal error: Call to undefined method DOMDocument::get_elements_by_tagname() in /opt/lampp/htdocs/javo/write_to_xml.php on line 69
neviete kde je chyba? diki
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

nepocuvas neposluchas

Kód: Vybrať všetko

<?php
if (!$dom = domxml_open_mem($xmlstr)) {
  echo "Error while parsing the document\n";
  exit;
}

$root = $dom->document_element();

$node_array = $root->get_elements_by_tagname("element");

for ($i = 0; $i<count($node_array); $i++) {
    $node = $node_array[$i];
    echo "The element[$i] is: " . $node->get_content();
}

?> 
javo
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 15 sep 2006, 21:30
Kontaktovať používateľa:

Príspevok od používateľa javo »

ano aj toto som uz skusal ale
Fatal error: Call to undefined function domxml_open_mem() in /opt/lampp/htdocs/javo/write_to_xml.php on line 47
vlastne to iste, tieto funkcie akoby neche brat, pricom PHP mam s podoporov pre tieto funkcie ,
//myslim ze DOM funkcie su aj sucastou jadra PHP
neppo
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 774
Registrovaný: 09 jún 2005, 15:33

Príspevok od používateľa neppo »

javo napísal:ano aj toto som uz skusal ale vlastne to iste, tieto funkcie akoby neche brat, pricom PHP mam s podoporov pre tieto funkcie ,
//myslim ze DOM funkcie su aj sucastou jadra PHP
len ma tak napadlo aku verziu PHP mas ?
javo
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 15 sep 2006, 21:30
Kontaktovať používateľa:

Príspevok od používateľa javo »

neppo napísal:len ma tak napadlo aku verziu PHP mas ?
takmer najnovsiu
PHP/5.2.3
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

no pretoze :
DOMDocument -objektova trieda
get_elements_by_tagname() -funkcia objektovej triedy
no tak potom neviem z toho nic vyvodit len ze funkcia nieje definovana v tom objekte ak ti nefunguje ani ten kod

Kód: Vybrať všetko

$doc1=$doc->document_element();
$elements=$doc1->get_elements_by_tagname("msg");
tak ja uz neviem
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

A čo píše phpinfo()? Máš tam aj informácie o DOM rozšírení? (stále je to ako modul, ktorý musíš nainštalovať a povoliť)
javo
Medium Expert
Medium Expert
Používateľov profilový obrázok
Príspevky: 89
Registrovaný: 15 sep 2006, 21:30
Kontaktovať používateľa:

Príspevok od používateľa javo »

juho : nejde ani to , je to vlastne to iste ako mam v zdrojaku
co sa tyka konf. localhostu , takto by to malo byt ne?

Kód: Vybrať všetko

DOM/XML 	enabled
DOM/XML API Version 	20031129
libxml Version 	2.6.11
HTML Support 	enabled
XPath Support 	enabled
XPointer Support 	enabled
Schema Support 	enabled
RelaxNG Support 	enabled
juho
Star
Star
Používateľov profilový obrázok
Príspevky: 551
Registrovaný: 11 máj 2007, 21:16

Príspevok od používateľa juho »

no stale trvam na tom ze ta funkcia neexistuje skus pouzit tuto myslim ze ta je spravna

Kód: Vybrať všetko

$elements=$doc->getElementsByTagName("msg")
bez podtrznikov
tu funkciu insertbefore by som spravil takto:

Kód: Vybrať všetko

//$doc=new domdocument::load('guestbook.xml');
$doc = new DOMDocument();
$doc->load('guestbook.xml');

//toto je asi vytvorenie jedneho bloku
  $parent = $doc->createElement( "msg" );
 
  $author = $doc->createElement( "name" );
  $author->appendChild($doc->createTextNode( $comment[0] ));
  $parent->appendChild( $author );
  $title = $doc->createElement( "mail" );
  $title->appendChild($doc->createTextNode( $comment[1] ));
  $parent->appendChild( $title );
 
  $publisher = $doc->createElement( "text" );
  $publisher->appendChild($doc->createTextNode( $comment[2] ));
  $parent->appendChild( $publisher );
//koniec bloku

$elements=$doc->getelementsbytagname("msg")->item(0);//prvy tag msg v tagu msgs
$doc->documentElement->insert_before($elements,$parent);
$doc->save('guestbook.xml');
Napísať odpoveď