Mailinglisten-Archive |
Hi Albin, > Ich versuche mich an den neuen DOM-Funktionen in PHP5: Jetzt Sehr löblich! > bin ich bei folgendem Problem: Schaun wir doch mal > Ich habe ein XML-File, welches als Template dient und in das > jetzt ein weiteres XML-Snippet eingefügt werden soll. > Irgendwie finde ich im Manual oder in verschiedenen Tutorials (z.B.: > http://slides.bitflux.ch/phpconf2003/) etwas darüber. > > Ein XMl-Dokument "from scratch" aufbauen funktioniert, aber > ein Snippet einfügen, dazu habe ich noch nichts gefunden: > weder im Manual, noch bei bitflux (siehe oben) oder auch sonstwo... Daher, du möchtest weitere an ein bestehendes dokument anfügen, Oder möchtest du zwei vermischen? > Zur Verdeutlichung: Ich habe ein XMl-Template wie z. B.: > <root> > <FirstElement> > foo > </FirstElement> > <AnotherElement> > </AnotherElement> > </root> > und als Child von "AnotherElement" soll ein Snippet a la Wenn ich dich also richtig verstehe möchtest du jetzt dein snippet einfügen Gehen wir mal davon aus du hast mit (ersetze $dom durch den Namen deines DomDocument Objects) $snippet = $dom->createElement("snippet"); und weiteren dom funktionen dein Snippet aufgebaut so das du jetzt ein objekt namens $snippet hast Normal würdest du das ja nun mit $dom->documentElement->appendChild($snippet) anhängen (obs nun am documentElement oder woanders wäre.. Append Child aufjedenfall) Was dir nun also fehlt ist der "ersatz" für $dom->documentElement, daher du brauchst ein Element an das du das anhängen kannst, Korrekt? Das könntest du dann z.B. bekommen mit $xp = new domxpath($dom); if($node = $xp->query("/root/AnotherElement/")) { $node->appendChild($snippet); } Damit würdest du $snippet unter AnotherElement angliedern, Natürlich musst du deinen Xpath ein wenig anpassen, damit dieser deinen anforderungen gerecht wird (wenn du z.B. mehrere AnotherElement Elemente hast) Eine gute Referen für xpath (in deutsch) finde ich die von Selfhtml im XSL bereich: http://de.selfhtml.org/xml/darstellung/xpathsyntax.htm Wenn $snippet jedoch ein eigenes DomDocument ist, Dann musst du quasi in einer schleife vorgehen um es einzusetzen: $xp = new domxpath($dom); if($node = $xp->query("/root/AnotherElement/")) { foreach ($snippet->documentElement->childNodes as $element) { $newnode = $dom->importNode($element,true); $node->appendChild($newnode); } } (ich hab das ganze jetzt nicht getestet, sollte aber für einen Denkanstoss reichen (hoff ich)) Ich hoffe das ganze hat dir weitergeholfen und wünsche dir weiterhin viel Spass und Erfolg mit dem Einsatz von PHP5 mit DOM :) Mit freundlichen Grüßen, Peter Petermann
php::bar PHP Wiki - Listenarchive