【发布时间】:2014-01-08 16:14:36
【问题描述】:
我正在尝试使用 DOM 文档删除 php 中的多个元素,但它无法正常工作。
<iPhone>
<enAttentePush>
<UDID>dd6fc8032f0bf4c4b3a9c60f523900c9ad463b620a83b6473eda9a12b2c9d47f</UDID>
<Message>someDataHere</Message>
</enAttentePush>
<enAttentePush>
<UDID>dd6fc8032f0bf4c4b3a9c60f523900c9ad463b620a83b6473eda9a12b2c9d47f</UDID>
<Message>someDataHere</Message>
</enAttentePush>
</iPhone>
我想循环进入我的 xml 文档,然后删除所有元素以获得一个空文件。
这是我在 php 中所做的:
$doc = new DOMDocument;
$doc->load('$myFile');
$domNodeList = $doc->getElementsByTagName('enAttentePush');
$arraySeen = array();
$arrayBug = array();
foreach ($domNodeList as $domElement)
{
//echo('loop / ');
$tempArray = array();
$aps = $domElement->getElementsByTagName('Message')->item(0)->nodeValue;
$udid = $domElement->getElementsByTagName('UDID')->item(0)->nodeValue;
if (!in_array($udid, $arraySeen))
{
$tempArray[]=$aps;
$tempArray[]=$udid;
$arrayBug[]=$tempArray;
$arraySeen[]=$udid;
}
echo("-- removed -- ");
$domElement->parentNode->removeChild($domElement);
}
它只删除一个节点,一般是最后一个。
我该如何循环思考我的节点并在每次看到节点时将其删除?
非常感谢。
【问题讨论】:
-
如果我记得模糊,删除节点会扰乱节点查询,这意味着您必须重新查询 DOM,直到所有节点都被删除。因此,您应该考虑使用
while() { },而不是foreach() { }。 -
好吧,我不知道如何用 dom 做一个 while 循环...
标签: php xml domdocument