请告诉我为什么第一个变种不起作用

2022-04-13 00:00:00 xpath php simplexml unset

我希望你能在这一点上帮我:

我想通过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>

解决方案

第一个变量不起作用,因为您正在取消设置新创建的数组的元素,SimpleXML元素根本不会被触及。尝试

unset($image[0][0]);

相关文章