”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何使用 SimpleXML 和 DOMDocument 删除 XPath 节点?

如何使用 SimpleXML 和 DOMDocument 删除 XPath 节点?

发布于2024-11-08
浏览:791

How Can I Delete an XPath Node Using SimpleXML and DOMDocument?

SimpleXML:删除 XPath 节点

在本文中,我们将探讨如何使用以下方法有效地从 XML 文档中删除父节点: SimpleXML 和 XPath。

了解 SimpleXML限制

提供的代码尝试使用 SimpleXML 在通过 XPath 找到父节点后删除它。然而,SimpleXML 的 unset() 函数仅删除存储在变量中的对象引用,而不是节点本身。

DOMDocument 来拯救

要克服 SimpleXML 的限制,请考虑使用 DOMDocument,它可以更直接地操作 XML 文档的结构。

解决方案使用DOMDocument

  1. 创建 DOMDocument 对象并将 XML 文件加载到其中。
  2. 使用 XPath 查询并选择目标节点。
  3. 移除父节点节点使用 $node->parentNode->removeChild($node).

示例代码和输出

$doc = new DOMDocument;
$doc->loadXML(...);
$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();

此代码删除 item_id 456 的产品的 节点,导致修改后的 XML 文档没有该节点。

结论

DOMDocument 允许对 XML 文档进行更稳健的操作,包括直接删除节点。虽然 SimpleXML 对于基本的 XPath 查询来说很方便,但 DOMDocument 更适合更复杂的 XML 操作任务。

最新教程 更多>
  • 如何使用 JavaScript 动态更改 CSS :root 颜色变量?
    如何使用 JavaScript 动态更改 CSS :root 颜色变量?
    更改 CSS :JavaScript 中的根颜色变量在 Web 开发领域,自定义网页的视觉美感通常是通过CSS 变量的使用。这些变量在 CSS 的 :root 部分中定义,使开发人员能够控制设计的各个方面。一种常见的场景是能够使用 JavaScript 动态更改这些颜色。要实现这一点,关键代码是:d...
    编程 发布于2024-12-22
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    编程 发布于2024-12-22
  • 除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有什么地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-22
  • ES6 块级函数语义在严格模式和非严格模式下有何不同,以及 Web 扩展如何影响它们?
    ES6 块级函数语义在严格模式和非严格模式下有何不同,以及 Web 扩展如何影响它们?
    理解 ES6 块级函数的语义简介随着 ES6 的出现,块级函数声明成为该语言的一个有价值的补充。尽管有最初的假设,这些函数的精确语义涵盖了更广泛的范围,包括严格模式和非严格模式之间的区别以及浏览器兼容性考虑因素。语义下表总结了块级函数语义的关键方面:执行环境外部可见块提升到块顶部TDZ非严格,无网络...
    编程 发布于2024-12-22
  • Go 条件编译中 `//go:build` 和 `// +build` 之间的主要区别是什么?
    Go 条件编译中 `//go:build` 和 `// +build` 之间的主要区别是什么?
    //go:build 和 // build 之间的区别在 Go 1.17 中,引入了一个名为 //go:build 的新条件编译指令来替代旧的 // 构建指令。虽然这两个指令都具有指定构建约束的相同目的,但使用 //go:build.语法差异://go:build 有几个关键区别和优点遵循与其他 ...
    编程 发布于2024-12-22
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-22
  • C 中“void”的大小是多少?
    C 中“void”的大小是多少?
    问题:理解“void”的未定义大小在 C 编程中,关键字“void”表示类型的缺失。这就提出了一个问题:“void”的大小是多少?答案:类型“void”在 C 中没有定义大小。它不是一个对象或指针的有效类型,因此尝试这样使用它会导致编译错误。具体来说,语句:void n;是无效的,因为它试图声明一个...
    编程 发布于2024-12-22
  • 为什么Python这种解释性语言会生成.pyc文件?
    为什么Python这种解释性语言会生成.pyc文件?
    如果Python是解释型语言,为什么会存在.pyc文件?虽然Python通常被称为解释型语言,但它并不是严格准确。解释只是其实现的一个层面。从语言角度看将Python定义为解释性语言是指其底层语言规范,与具体实现不同。 Python 如何解释源代码的实现细节可能会根据所使用的特定 Python 解释...
    编程 发布于2024-12-22
  • 在带有 Echo 和 Return 的 PHP 连接中何时使用逗号与句点?
    在带有 Echo 和 Return 的 PHP 连接中何时使用逗号与句点?
    标点符号在 PHP 连接中的重要性:句点和逗号与回显和回车的研究在 PHP 中,连接起着至关重要的作用在字符串操作中。但是,在与 echo 和 return 等不同结构连接时选择使用句点或逗号可能会导致意外结果。让我们探讨一下这种区别的复杂性。理解 Echo 和 ReturnEcho 是一种为输出数...
    编程 发布于2024-12-22
  • 如何在 PHP 中追加数组而不进行基于键的复制?
    如何在 PHP 中追加数组而不进行基于键的复制?
    优雅地追加数组,无需基于键的重复在 PHP 数组操作领域,将一个数组追加到另一个数组而不覆盖其键可以提出挑战。许多开发人员求助于使用 array_push 或数组联合运算符 ( ) 等方法,这通常会产生不期望的结果。但是,存在一种优雅的解决方案,可以无缝合并数组,同时保留其密钥完整性。输入数组合并。...
    编程 发布于2024-12-22
  • C++ 程序支持可变长度数组 (VLA) 吗?
    C++ 程序支持可变长度数组 (VLA) 吗?
    C 中的可变长度数组:揭穿的神话C 中的可变长度数组 (VLA) 的前景一直是争论的主题多年来。虽然 VLA 已成为 C99 标准的组成部分,但它们在 C 中的存在仍然是一个问号。C99 规范明确允许声明可变长度数组,其中数组的大小未在编译时而是在执行期间动态确定。然而,C 对 VLA 的立场并不那...
    编程 发布于2024-12-22
  • 如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    如何修复 macOS 上 Django 中的“配置不正确:加载 MySQLdb 模块时出错”?
    MySQL配置不正确:相对路径的问题在Django中运行python manage.py runserver时,可能会遇到以下错误:ImproperlyConfigured: Error loading MySQLdb module: dlopen(/Library/Python/2.7/site-...
    编程 发布于2024-12-22
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-22
  • 插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入数据时如何修复“常规错误:2006 MySQL 服务器已消失”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2024-12-22
  • 如何高效地将数据从SQL Server 2005迁移到MySQL?
    如何高效地将数据从SQL Server 2005迁移到MySQL?
    将数据从 SQL Server 2005 导出到 MySQL在数据迁移领域,从 SQL Server 2005 到 MySQL 的过渡可能会带来挑战。一项特别艰巨的任务是提取存储在近 300 个表中的大量数据并将其转换为兼容的 MySQL 数据库。使用 bcp 的局限性,例如无效的 CSV 格式以及...
    编程 发布于2024-12-22

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3