1

これで私を助けてくれることを願っています:

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>
4

1 に答える 1

0

新しく作成された配列の要素を設定解除しているため、最初のバリアントは機能しません。SimpleXML 要素はまったく変更されません。試す

unset($image[0][0]);
于 2012-10-21T21:46:32.330 に答える