LibXML2 の 'Not Found Error' をデバッグするには? この関数 (ここに投稿するために簡略化/書き直されています) は、ノードのリストをタグでグループ化します。
function groupList(DOMNodeList &$list,$tag,&$dom) {
$list = iterator_to_array($list); // to save itens
$T = $dom->createElement($tag);
$N = count($list);
if ($N && $list[0]->nodeType==1) {
for($i=0; $i<$N; $i++)
$T->appendChild( $list[$i] );
// here print $dom->saveXML($lista[0]) shows the expected XML.
$list[0]->parentNode->replaceChild($T, $list[0]);
//Fatal error: ... 'DOMException' with message 'Hierarchy Request Error'
// also error with $dom->documentElement->replaceChild( $T, $list[0] );
// where error is: ... 'DOMException' with message 'Not Found Error'
for($i=1; $i<$N; $i++)
$list[$i]->parentNode->removeChild($list[$i]);
}//if
return $N;
}//func
Edit1:$list[0]->parentNode->replaceChild($T, $list[0]);
エラーは「Hierarchy Request Error」です。デバッグprint $dom->saveXML($list[0])
は予想される XML を示します。
Edit2: INPUT と OUTPUT による説明、
入力
<root><b>10</b><a/><a>1</a><b>20</b><a>2</a></root>
期待される出力groupList($dom->getElementsByTagName('a'),'G')
<root><b>10</b>
<G><a/><a>1</a><a>2</a></G>
<b>20</b></root>