我从外部源提取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.
有没有办法做到这一点?或者是否有更好的解决方案来解决我想要完成的事情?