問題:
在SimpleXML 中,如何刪除與透過XPath 識別特定元素?
問題描述:
使用以下程式碼尋找並刪除具有特定item_id 的項目失敗:
<code class="php">$xml = simplexml_load_file($filename); $data = $xml->xpath('//items/info[item_id="' . $item_id . '"]'); $parent = $data[0]->xpath("parent::*"); unset($parent);</code>
unset($parent) 語句不會消除父項
答案:
直接對物件變數(本例為$parent)呼叫unset() 只會刪除物件引用,而不是節點本身。
使用 DOMDocument 的解決方案:
<code class="php">$doc = new DOMDOcument; $doc->loadxml(...XML string...); $item_id = 456; $xpath = new DOMXPath($doc); foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) { $node->parentNode->removeChild($node); }</code>
此循環迭代匹配
輸出:
<code class="xml"><?xml version="1.0"?> <foo> <items> <info> <item_id>123</item_id> </info> </items> <items> <info> <item_id>789</item_id> </info> </items> </foo></code>
以上是如何使用 XPath 刪除 SimpleXML 中的父節點?的詳細內容。更多資訊請關注PHP中文網其他相關文章!