2017-09-01 4 views
0

私はPHPを初めて使っていますので、事前にお詫び申し上げます。私はXMLの解析に取り組んできましたが、ここでは記事のおかげですべてがうまくいっていますが、私のXMLから要素を削除するときには奇妙な動作が見られます。PHP removeChildのみ3つの要素のうち2つを削除します

私は、WebサービスからXMLを引っ張ってきたし、それは素晴らしい取り組んでいる、今私はXPathは(私にとっては)挑戦であることが証明された、要素のすべてのインスタンスを削除する必要があるので、今、私はこれがあります。

$idlist = $dom2->getElementsByTagName('ELEMENTID'); 
foreach ($idlist as $id) { 
    print "<!--"."Removing Node ".$id->nodeName."=".$id->nodeValue."-->"; 
    //$id->parentNode->removeChild($id); 
    } 

私のプリントがXMLコメントである理由は、XML出力ファイルを生成しているからです。

私のXMLには、123という3つの要素が含まれています。コードを表示すると、3つすべてのnodeNameとnodeValueが表示されます。しかし、removeChild行のコメントを外すと変わってしまい、最初と3番目に一致する要素は削除されますが、2番目の要素は削除されません。

私の説明がややはっきりしていますが、このように反応する可能性があるremoveChild()については何かありますか?

ありがとう、クリス。

+0

子供を1人削除すると、その子供はもうコレクションに含まれなくなります。 'while($ id = $ idlist [0])'を試してください。 –

+0

このページの最初のコメントを確認してください:http://php.net/manual/en/domnode.removechild.php – jh1711

答えて

0

私はあきらめてポストした後に解決策を見つけることが多いようですが、あなたが後退しない限り、いくつかスキップしたノードを削除するときに特殊性があるようです。

私がforループを使用し、配列を後ろ向きに移動すると、すべて正常です。

$idlist = $dom2->getElementsByTagName('ELEMENTID'); 
$length = $idlist->length; 
for ($i=$length-1;$i>=0;$i--) 
{ 
    $id = $idlist->item($i); 
    $id->parentNode->removeChild($id); 
} 
関連する問題