.NET C# Java Javascript Exception

 | 
Frage stellen Fragen Themen Mitglieder Abzeichen RSS-Feed
3
Hi Leute,

ich erstelle mit ein DOMDocument in PHP per:

$dom = new DOMDocument();
$dom->strictErrorChecking = FALSE;
$dom->loadHTMLFile($filename);

und suche in diesem eine bestimmte node mit dem Attribute "class == char_info":

$allDivs = $dom->getElementsByTagName("div");

$div_char_info = null;
foreach($allDivs as $node) {
$className = $node->getAttribute('class');
if($node->nodeType == 1 && $className == "char_info") {
$div_char_info = $node;
}
}

Soweit funktioniert auch alles, nun möchte ich aber aus dem gefundenen node namens $div_char_info ein neues DOMDocument Objekt erstellen, welches nebst der $div_char_info Node auch alle Children mitnimmt (kopiert). Das neue DOMDocument benötige ich um mit DOMXPath einen Query innerhalb dieses abzusetzen.

Nur wie kann ich mithilfe des gefundenen Nodes "$div_char_info" ein neues DOMDocument erstellen?
Themen:
23.10.09
The_Holy_One 373 5
Kommentieren - Für Rückfragen oder Anmerkungen
3 Antworten
3
Du legst ein neues DomDocument an und integrierst mit der Methode importNode() den gefundenen Knoten.
...
$newDOM = new DOMDocument();
$newDOM->importNode( $div_char_info, true );
...

Der zweite Parameter, der hier auf True steht, bewirkt das rekursiv der gesamte Subtree importiert wird.
23.10.09
FalkP 3,2k 2 7
0
Ich habe per

print $div_char_info->textContent;

Nach dem durchlaufen der foreach Schleife die gefundene Node und alle Kinder ausgegeben. Es ist also garantiert das einerseits die richtige Node gefunden wurde, als auch das an dieser ein Haufen an Informationen angehängt sind.

Wenn ich jedoch nun

...
$newDOM = new DOMDocument();
$newDOM->importNode( $div_char_info, true );
...

durchführe, und dann per:

print $newDOM->saveHTML();

das neue DOMDocument versuche auszugeben, ist die Ausgabe leer. Beim Import wird also die angegeben Node, die wie bereits oben erwähnt, definitiv Content besitzt, nicht übertragen.

Was könnte die Ursache für das Problem sein?
0
Ich habe inzwischen die Lösung selbst gefunden, der 'Fehler' lag daran das zwar die Node in das DOMDocument kopiert wurden, jedoch - wenn man mal darüber nachdenkt - logischerweise nicht automatisch im DOMDocument Tree angehängt wird. Deshalb muss man mit 'appendChild' angeben wohin die neue Node samt all ihrer Child's angehängt werden soll.

Hier also die Lösung:

//Neues DOMDocument erstellen
$newDOM = new DOMDocument();

//Ein root Element erstellen
$newDOM->loadXML("<root></root>");

//Die Node 'div_char_info' in das neue DOMDocument 'newDom' kopieren,
//Das Ergebnis ist eine Node 'node' welche sich nun im 'newDom' befindet.
$node = $newDOM->importNode( $div_char_info, true );

//Die neue Node 'node' im DOMDocument 'newDOM' an das Root-Element anhängen!
$newDOM->documentElement->appendChild($node);

//Testausgabe
print $newDOM->saveHTML();
Lösung stammt von:
http://de2.php.net/manual/de/domdocument.importnode.php
The_Holy_One 29.10.09
Deine Antwort
Entweder einloggen... ...oder ohne Wartezeit registrieren
Name
Passwort
Passwort wiederholen
E-Mail
Geworben von


Login mit OpenID

Mit einem OpenID-Account kannst Du dich auf allen Webseiten anmelden, die OpenID unterstützen. Du hast bereits ein Benutzerkonto bei einem der folgenden Provider? Dann kannst Du dich direkt hier damit registrieren.


OpenID-Provider anklicken: