使用SimpleXMLElement从文件中删除XML元素

时间:2016-06-30 09:58:05

标签: php xml laravel simplexml

我从外部源提取XML数据,需要根据数据库中存在的ID来编辑此文件,如果不应该返回该节点,我将无法删除该节点。

以下是任何编辑之前的XML结构。

<Document>
  <Placemark>
    <name> name </name>
    <address> address </address>
    <description></description>
    <timestamp>
       <when>2016-06-20T13:56:00-04:00</when>
    </timestamp>
    <styleurl>#asset1234</styleurl>
    <point>
        <coordinates>28.006725,-20.353084,2320</coordinates>
    </point>
  </Placemark>
</Document>

以下是我目前在代码中所做的事情:

$url = "www.api.com/GetData"; // This return the XML contents
$contents = file_get_contents($url);
$xml = new SimpleXMLElement($contents);

foreach ($xml->Document->Placemark as $placemark) {
    $id = str_replace(['#', 'asset'], '', $placemark->styleUrl);
    $tracker = $company->GsatTrackers()->where('tracker_id', $id)->first();

    if (!$tracker) {
        // Remove the placemark
    }
}

它可以很好地遍历数据,但删除节点是个问题,我尝试在上面指定的位置删除它几个方法:

unset($placemark); // Does nothing.

unset($placemark[0]); // Throws error when continuing the foreach: element no longer exists.

$dom = dom_import_simplexml($placemark);
$dom->parentNode->removeChild($dom); // This works for the first one in the foreach loop but breaks the loop.

有没有办法做到这一点?或者是否有更好的解决方案来解决我想要完成的事情?

0 个答案:

没有答案