在PHP中删除XML节点

时间:2014-03-03 20:24:46

标签: php xml xml-parsing

我正在尝试使用SimpleXML for PHP,我对此感到疑惑。 XML文档是这样的:

<?xml version="1.0" standalone="yes"?>
<users>
    <user id="1">
        <name>Jan</name>
        <sex>Male</sex>
        <password>fu9f8w9080fd9id9di093r9f9if9if9d0sfu</password>
        <avatar type="remote">http://www.avatars.com/av_1.gif</avatar>
    </user>

    <user id="3">
        <name>Piet</name>
        <sex>Male</sex>
        <password>fu9f8w9080fd9id9di093r9f9if9676674bv</password>
        <avatar type="local">html/avatars/Eten%20en%20drinken/cola.png</avatar>
    </user>

    <user id="4">
        <name>Ilse</name>
        <sex>Female</sex>
        <password>fu9f8w9080fd9id9di4564564564539d0sfu</password>
        <avatar type="none"/>
    </user>

    <user id="5">
        <name>Els</name>
        <sex>Female</sex>
        <password>fu9f8w9080fd9id9di09gi5uy378wrfuih4w</password>
        <avatar type="upload">avatar_1.gif</avatar>
    </user>
</users>

我做了一个降序循环以删除所有女性用户,但我想知道是否有其他方法,使用foreach迭代用户或使用xpath选择所有女性记录并立即删除它们。

另外,我想知道你是否可以在不迭代所有用户的情况下删除所有节点。

到目前为止,我已经发现“removeChild”在simpleXML中不起作用,或者我错过了什么。

谢谢,

Coenj

1 个答案:

答案 0 :(得分:0)

事实上,PHP中没有removeChild:http://www.php.net/manual/en/book.simplexml.php

您可以使用xpath进行选择,然后使用循环和unset

$xml = simplexml_load_string($x); // assume XML in $x
$females = $xml->xpath("/users/user[sex = 'Female']");
foreach ($females as $female) unset($female[0]);

看到它正常工作:https://eval.in/108813