Soalan:
Dalam SimpleXML, bagaimana saya boleh memadamkan nod induk yang dikaitkan dengan elemen khusus yang dikenal pasti melalui XPath?
Penerangan Masalah:
Menggunakan kod berikut untuk mencari dan mengalih keluar item dengan item_id tertentu gagal:
<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>
Pernyataan unset($parent) tidak menghapuskan
Jawapan:
Panggilan terus unset() pada pembolehubah objek ($induk dalam kes ini) hanya mengalih keluar rujukan objek, bukan nod itu sendiri.
Penyelesaian Menggunakan 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>
Gelung ini berulang melalui pemadanan
Output:
<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>
Atas ialah kandungan terperinci Bagaimana untuk mengalih keluar Nod Induk dalam SimpleXML Menggunakan XPath?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!