PHP DOM删除子

时间:2012-12-18 21:37:02

标签: php xml dom simplexml

我正在尝试从我的xml中删除<wcccanumber>的父节点,如果它的内容符合某个标准,但它只是删除了一个节点<wcccanumber>。如何删除整个父节点?

继承我的代码:

$xml = new SimpleXMLElement('<xml/>');

if (file_exists("xml/units/E01.xml")) {

    $xml = simplexml_load_file("xml/units/E01.xml");

    echo "File exists";
    echo "</br>";

    $wcccanumber = "121202482";

    foreach ($xml->call->wcccanumber as $call) {
        if ($call == $wcccanumber) {
            $dom = dom_import_simplexml($call);
            $dom->parentNode->removeChild($dom);

            $fp = fopen("xml/units/E01.xml","wb");
            fwrite($fp,$xml->asXML());
            fclose($fp);
        }
    }
}

这是xml:

<xml>
  <call>
     <wcccanumber>121202482</wcccanumber>
     <currentcall>FALL</currentcall>
     <county>W</county>
     <id>82</id>
     <location>234 E MAIN ST</location>
     <callcreated>12:26:09</callcreated>
     <station>HBM</station>
     <units>E01</units>
     <calltype>M</calltype>
     <lat>45.5225067888299</lat>
     <lng>-122.987112718574</lng>
     <inputtime>12/18/2012 12:27:01 pm</inputtime>
  </call>
</xml>

1 个答案:

答案 0 :(得分:1)

遍历call并将$call->wcccanumber$wcccanumber进行比较。将$call转换为dom并将其删除(parentNode->removeChild)。

foreach ($xml->call as $call) {
    if ($call->wcccanumber == $wcccanumber) {
        $dom = dom_import_simplexml($call);
        $dom->parentNode->removeChild($dom);
        $fp = fopen("xml/units/E01.xml","wb");
        fwrite($fp,$xml->asXML());
        fclose($fp);
    }
}

如果有多个删除,只有在 完成所有删除后才能保存一次。

$deletionCount = 0;

foreach ($xml->call as $call) {
    if ($call->wcccanumber != $wcccanumber) {
        continue;
    }
    $dom = dom_import_simplexml($call);
    $dom->parentNode->removeChild($dom);
    $deletionCount++;
}

if ($deletionCount) {
    file_put_contents("xml/units/E01.xml", $xml->asXML());
}