2014-03-03 77 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