删除 PHP 中的 XML 节点 [重复]

Posted

技术标签:

【中文标题】删除 PHP 中的 XML 节点 [重复]【英文标题】:Remove XML nodes in PHP [duplicate] 【发布时间】:2014-04-05 02:01:58 【问题描述】:

我正在试验 php 的 SimpleXML,我想知道一些事情。 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>

我做了一个降序 for 循环来删除所有女性用户,但我想知道是否还有其他方法,使用 foreach 遍历用户或使用 xpath 选择所有女性记录并一次性删除。

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

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

谢谢,

科恩杰

【问题讨论】:

【参考方案1】:

其实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

【讨论】:

以上是关于删除 PHP 中的 XML 节点 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中删除 XML 的节点 [重复]

在php中使用simplexml删除节点[重复]

通过保留第一次出现的节点来删除 XSLT 属性中的重复项

如何删除 XQuery 中的重复节点?

在 XML 中查找重复值并在 XSL 中删除节点

如何根据条件从 XML 中删除节点?