如何通过simplexml从XML文件中删除子项?

时间:2013-08-07 13:34:33

标签: php simplexml

我有以下xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <number_of_gr>
        3
    </number_of_gr>
    <group id="0">
        <name>Admins</name>
        <backend>1</backend>
        <every_plugin_feature> 1 </every_plugin_feature>
    </group>
    <group id="1">
        <name>Users</name>
        <backend>0</backend>
        <every_plugin_feature>0</every_plugin_feature>
    </group>
    <group id="2">
        <name>Moderators</name>
        <backend>0</backend>
        <every_plugin_feature>0</every_plugin_feature>
    </group>
</root>

例如:我想删除id =“0”的组。但我不知道如何在simplexml中删除具有指定属性的子项。

我试过这段代码:

<?php
$xml = simplexml_load_file("../xml/groups.xml");
$delgroup = $xml->xpath("/root/group[@id='".$_GET['group']."'");
unset($delgroup);
$xml-> asXML("../xml/groups.xml");
?>

但它不起作用。

在这个过程之后,我将用id = 1填补空白,但我可以在没有帮助的情况下完成。

我的问题是:如何删除指定的组?

1 个答案:

答案 0 :(得分:1)

你几乎就在那里,只是稍微调整一下:

$delgroup = $xml->xpath("//group[@id='".$_GET['group']."'")[0];
unset($delgroup[0]);

看到它有效:http://codepad.viper-7.com/ZVXs4O

这需要PHP&gt; = 5.4 要看一下背后的理论:Remove a child with a specific attribute, in SimpleXML for PHP - &gt;看哈克的答案。

PS:请记住更改<number_of_gr> - 或从XML中删除此节点,因为您始终可以通过...获取此号码。

$groups = $xml->xpath("//group");
$numberofgroups = count($groups);