これで私を助けてくれることを願っています:
unset で xml ノードを削除したい。これを行う方法には 2 つのバリエーションがありますが、機能しているのは 1 つだけです。違いは何ですか、または2番目のバリアントのみが機能する理由を教えてください。
したがって、最初のバリアントを使用すると、print_r() 関数は、削除されたはずの画像「Hansio」を含む xml ファイル全体を返します。しかし、2 番目のバリアントを使用すると、画像が削除されます。
(実際には、php コード全体と xml ファイルのテキストをファイルにコピーして、すぐにテストすることができます。もちろん、1 つのバリアントをコメントアウトすることを除いて、変更は必要ありません。)
PHP ファイル:
<?php
$galleries = new SimpleXMLElement('galleries.xml', NULL, TRUE);
/*Variant 1: NOT WORKING_____________________________________________________________*/
$image = $galleries->xpath("//galleries/gallery[@name='gallery']/image[@name='Hansio']");
unset($image[0]);
/*Variant 2: WORKING BUT NOT SO CONVENIENT___________________________________________*/
foreach($galleries->xpath("//galleries/gallery[@name='gallery']/image[@name='Hansio']") as $image)
{
unset($image[0]);
}
print_r($galleries);
?>
XML ファイル:
<?xml version="1.0" encoding="utf-8"?>
<galleries>
<gallery name="gallery">
<image name="image name 1"/>
<image name="image name 2"/>
<image name="Hansio"/>
<image name="image name 4"/>
</gallery>
</galleries>