Ich habe folgendes Problem mit DOM-Objekten in PHP. Ich gebe ein DOM-Objekt über den return-Wert einer Funktion zurück und wenn ich danach darauf zugreife hat sich das DOMElement verändert. Folgenden Code einfach mal laufen lassen und die Aussage beobachten:
Ausgegeben wird:
Sorry, das der Code so lang ist, aber ich bekomme das Problem auch in keinem kleineren Beispiel reproduziert. Wenn man es im Debugger laufen lässt wird das Problem sehr deutlich. In der Funktion _getHierarchy() wird ein neues DOMElement erzeugt und man kann auf nodeNam zugreifen. Aber wenn das Objekt an die Hauptfunktion getHierarchy returned wird steht in nodeName der Name des Nodes nicht mehr drin...
Ich brüte schon seit Stunden über dem Problem, sehe den Fehler aber nicht.
Wäre über jede Hilfe dankbar!
Herzliche Grüße,
Daniel
PHP-Code:
$domTree = getHierarchy('produktrelease');
$domTree->save('test.xml');
function getHierarchy($table) {
global $db;
$domTree = new DOMDocument('1.0', 'iso-8859-1');
$me = $domTree->createElement($table);
$parent = _getHierarchy($domTree,$me);
var_dump($parent);
echo 'zurueck '.$parent->nodeName.'<br>';
if (is_object($parent)) {
$parent->appendChild($me);
$domTree->appendChild($parent);
}
else {
$domTree->appendChild($me);
}
return $domTree;
}
function _getHierarchy($domTree, $parent) {
global $db;
$me = getParent($parent->nodeName);
if ($me) {
$meNode = $domTree->createElement($me);
$parent = _getHierarchy($domTree,$meNode);
if ($parent) {
var_dump($meNode);
echo 'returning '.$meNode->nodeName. '<br>';
$parent->appendChild($meNode);
echo 'returning2 '.$meNode->nodeName. '<br>';
return $meNode;
}
else {
return $meNode;
}
}
else {
return null;
}
}
function getParent($name) {
if ($name == 'produktversion') return 'produktrelease';
if ($name == 'produktreleaselizenz') return 'produktrelease';
if ($name == 'produktrelease') return 'produkt';
if ($name == 'produkt') return 'geschaeftsfeld';
return null;
}
object(DOMElement)#3 (0) {
}
returning produkt<br>returning2 produkt<br>NULL
zurueck <br>
}
returning produkt<br>returning2 produkt<br>NULL
zurueck <br>
Ich brüte schon seit Stunden über dem Problem, sehe den Fehler aber nicht.
Wäre über jede Hilfe dankbar!
Herzliche Grüße,
Daniel
Kommentar