PHP,simplexml,删除:请告诉我为什么第一个变体不起作用

时间:2012-10-21 21:19:29

标签: php xpath 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>

1 个答案:

答案 0 :(得分:0)

第一个变体不起作用,因为您未设置新创建的数组的元素,所以根本不触及SimpleXML元素。尝试

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