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

Linda Hamilton
发布: 2024-10-26 12:56:29
原创
154 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!