Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana untuk mengalih keluar Nod Induk dalam SimpleXML Menggunakan XPath?

Bagaimana untuk mengalih keluar Nod Induk dalam SimpleXML Menggunakan XPath?

Linda Hamilton
Linda Hamiltonasal
2024-10-26 12:56:29220semak imbas

How to Remove a Parent Node in SimpleXML Using XPath?

SimpleXML - Mengalih keluar Nod XPath

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 induk; nod.

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 nod, mengalih keluar nod induk dan mengemas kini objek $doc.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn