【问题标题】:PHP, simplexml, Delete: Please tell me why the first variant is not workingPHP,simplexml,删除:请告诉我为什么第一个变体不起作用
【发布时间】:2012-10-11 17:23:24
【问题描述】:

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

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

【问题讨论】:

    标签: php xpath simplexml unset


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 2013-05-08
      相关资源
      最近更新 更多