2014-03-03 134 views
0

我正在尝试使用PHP的SimpleXML,并且我在想某些事情。 XML文档是这样的:删除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

回答

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("https://stackoverflow.com/users/user[sex = 'Female']"); 
foreach ($females as $female) unset($female[0]); 

见它的工作原理:https://eval.in/108813