首页 >后端开发 >php教程 >如何使用 XPath 删除 SimpleXML 中的父节点?

如何使用 XPath 删除 SimpleXML 中的父节点?

Linda Hamilton
Linda Hamilton原创
2024-10-26 12:56:29223浏览

How to Remove a Parent Node in SimpleXML Using XPath?

SimpleXML - 删除 XPath 节点

问题:

在 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>

此循环迭代匹配 ;节点,删除父节点,并更新 $doc 对象。

输出:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn