1

我希望你能帮我解决这个问题:

我想通过 unset 删除一个 xml 节点。我有两种方法可以做到这一点,但只有一种有效。请告诉我有什么区别为什么只有第二个变体有效。

因此,当使用第一个变体时,print_r() 函数会返回整个 xml 文件,其中包含应该删除的图像“Hansio”。但是当使用第二个变体时,图像被删除了!

(实际上,您可以将整个 php 代码以及 xml 文件文本复制到一个文件中 - 并立即对其进行测试 - 无需更改 - 当然除了注释一个变体。)

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 回答