[PHP5] DOM xpath/insertBefore

Pagina: 1
Acties:

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 10-05 19:15
zie deze code. het is een testcase die zoveel mogelijk van alle onnodige code is ontdaan :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$xml="<root><node1/><node2/><node3/></root>";

$dom = new DomDocument();
$dom->loadXML($xml);

$path = new DOMXpath($dom);
$list = $path->query("//node2");
$node = $list->item(0);

$dom->insertBefore($node->cloneNode(),$node);

?>

de bedoeling is een kopie van een node die gevonden is middels xpath te kopieren en voor de gevonden node in de tree te stoppen (dit is een testcase, de echte is ingewikkelder). in php4 werkte een soortgelijke constructie goed. nu krijg ik :
code:
1
2
3
4
5
Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in
 /home/peter/test.php:12
Stack trace:
#0 {main}
  thrown in /home/peter/test.php on line 12

uit de melding begrijp ik dat de reference-node in de call naar insertBefore, $node, niet wordt gevonden in de tree. maar waarom niet ?

ik heb bugs.php.net erop nageslagen, en php-5.0.3rc1 geinstalleerd. het probleem blijft. ook google gaf geen antwoord. en voor zover ik de dom-specs begrijp, moet wat ik wil gewoon kunnen. ook een call als
code:
1
$dom->insertBefore($node->cloneNode(), $node->parentNode);

werkt wel correct.

iemand een idee of ik het fout heb, of dat ik weer een bug mag aanmaken bij bugs.php.net ?

[ Voor 7% gewijzigd door tech-no-logical op 10-12-2004 16:36 ]


  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 10-05 19:15
ok, voor de search dan maar. het 'probleem' is opgelost, en was ook eigenlijk geen probleem. na nog een keer goed naar de w3c dom-specs the hebben gekeken ben ik erachter dat insertBefore aangeroepen dient te worden op de parent van het child waarvoor je een node wil inserten. dus :
code:
1
$node->parentNode->insertBefore($node->cloneNode(), $node);

werkt naar behoren. de logica hiervan ontgaat me een beetje (behalve dan dat 't misschien wat efficienter is). de specs waren hierin iets duidelijker dan de php-documentatie...