phpbar.de logo

Mailinglisten-Archive

RE: [php] XML-Fragment in XML-Datei einfügen- DOM, PHP5

RE: [php] XML-Fragment in XML-Datei einfügen- DOM, PHP5

Peter Petermann PPetermann at vivaplus.tv
Sam Sep 18 18:38:01 CEST 2004


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