首页  >  文章  >  后端开发  >  如何删除 SimpleXML 中的 XPath 节点而不丢失整个结构?

如何删除 SimpleXML 中的 XPath 节点而不丢失整个结构?

Susan Sarandon
Susan Sarandon原创
2024-10-26 00:21:02510浏览

How to Remove an XPath Node in SimpleXML Without Losing the Entire Structure?

如何使用 SimpleXML 删除 XPath 节点

使用 XPath 查询查找和删除 XML 节点在 SimpleXML 中可能是一个挑战。本文解决了删除通过 XPath 搜索识别的父节点的问题。

考虑以下示例:

<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 中的对象的引用。

解决方案是恢复使用 DOMDocument 来完成此任务:

<code class="php">$doc = new DOMDocument;
$doc->loadxml('<foo>
  <items>
    <info>
      <item_id>123</item_id>
    </info>
  </items>
  <items>
    <info>
      <item_id>456</item_id>
    </info>
  </items>
  <items>
    <info>
      <item_id>789</item_id>
    </info>
  </items>
</foo>');
$item_id = 456;

$xpath = new DOMXpath($doc);
foreach($xpath->query('//items[info/item_id="' . $item_id . '"]') as $node) {
  $node->parentNode->removeChild($node);
}
echo $doc->savexml();</code>

此代码将删除 包含指定 的节点来自 XML 文档。它使用removeChild()方法从其父节点中删除节点。

以上是如何删除 SimpleXML 中的 XPath 节点而不丢失整个结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

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