PHP domDocument 删除子节点的子节点

2023-12-08

如何删除子节点的父节点,但保留所有子节点?

XML 文件是这样的:

<?xml version='1.0'?>
<products>
<product>
<ItemId>531<ItemId>
<modelNumber>00000</modelNumber>
<categoryPath>
<category><name>Category A</name></category>
<category><name>Category B</name></category>
<category><name>Category C</name></category>
<category><name>Category D</name></category>
<category><name>Category E</name></category>
</categoryPath>
</product>
</products>

基本上,我需要删除categoryPath 节点和category 节点,但将所有名称节点保留在产品节点内。我的目标是这样的文档:

 <?xml version='1.0'?>
<products>
<product>
<ItemId>531<ItemId>
<modelNumber>00000</modelNumber>
<name>Category A</name>
<name>Category B</name>
 <name>Category C</name>
<name>Category D</name>
<name>Category E</name>
</product>
</products>

PHP 有内置函数可以做到这一点吗?任何指针将不胜感激,我只是不知道从哪里开始,因为有很多子节点。

Thanks


处理 XML 数据的一个好方法是使用DOM设施。

一旦你了解了它,就很容易了。例如:

<?php

// load up your XML
$xml = new DOMDocument;
$xml->load('input.xml');

// Find all elements you want to replace. Since your data is really simple,
// you can do this without much ado. Otherwise you could read up on XPath.
// See http://www.php.net/manual/en/class.domxpath.php
$elements = $xml->getElementsByTagName('category');

// WARNING: $elements is a "live" list -- it's going to reflect the structure
// of the document even as we are modifying it! For this reason, it's
// important to write the loop in a way that makes it work correctly in the
// presence of such "live updates".
while($elements->length) {
    $category = $elements->item(0); 
    $name = $category->firstChild; // implied by the structure of your XML 

    // replace the category with just the name 
    $category->parentNode->replaceChild($name, $category); 
} 

// final result:
$result = $xml->saveXML();

查看实际效果.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP domDocument 删除子节点的子节点 的相关文章

  • openssl_pkey_get_details($res) 不返回公共指数

    我在用着这个例子 https stackoverflow com a 12575951 2016196使用 php 生成的密钥进行 javascript 加密openssl图书馆 但是 details openssl pkey get de
  • 删除PHP字符串中所有不匹配的字符?

    我有一个文本 我想从中删除所有不属于以下字符的字符 所需字符 0123456789 abcdefghijklmnopqrstuvwxyz n 最后一个是我确实想保留的 n 换行符 要匹配除列出的字符之外的所有字符 请使用反转字符集 http
  • 如何使用 phpunit 运行单个测试方法?

    我正在努力运行一个名为testSaveAndDrop在文件中escalation EscalationGroupTest php with phpunit 我尝试了以下组合 phpunit EscalationGroupTest escal
  • Yii 使用 ajax 进行分页

    我需要使用ajax启用分页 我的代码 控制器 更新内容ajax function actionIndex dataProvider new CActiveDataProvider News array pagination gt array
  • (Kiss)XML xpath 和默认命名空间

    我正在开发一个 iPhone 项目 需要解析一些 xml xml 可能包含也可能不包含默认名称空间 我需要知道如何解析 xml 以防它使用默认命名空间 由于我需要读取和写入 xml 因此我倾向于使用 KissXML 但我愿意接受建议 这是我
  • 如何使用 php 下载/打印页面的特定部分

    我有一个 HTML 页面如下 Lorem Ipsum is simply dummy text of the printing and typesetting industry Lorem Ipsum has been the indust
  • Symfony2 Assetic 和 Less Sourcemaps

    我不确定如何破解 assetic less 过滤器以输出源映射文件 我这里指的是LessFilterhttps github com kriswallsmith assetic blob master src Assetic Filter
  • “使用未定义常量”注意,但该常量应该被定义

    共有三个文件 common php controller php 和 user php 文件 common php 如下所示 文件controller php看起来像 文件 user php 如下所示 执行脚本时 会给出通知 注意 使用未定
  • PHP preg_filter 返回意外的长值

    尝试在 Woocommerce 中删除标签并过滤值 但无法以正确的格式获取它 有东西有腥味 我正在使用WC gt cart gt get cart subtotal 来检索该值 在此示例中 我的值是 2 429kr 原始返回值是 span
  • Woocommerce 结账自定义选择字段

    我有以下功能 将选择列表添加到 woo commerce 结账表单中 woocommerce form field airport pickup array type gt select class gt array airport pic
  • 跟踪用户何时点击浏览器上的后退按钮

    是否可以检测用户何时单击浏览器的后退按钮 我有一个 Ajax 应用程序 如果我可以检测到用户何时单击后退按钮 我可以显示适当的数据 任何使用 PHP JavaScript 的解决方案都是优选的 任何语言的解决方案都可以 只需要我可以翻译成
  • php 错误 fopen(): 文件名不能为空

    发送带有附件代码的电子邮件工作正常 最近我们已将文件传输到另一个托管服务器 idk 发生了什么 它显示以下错误 警告 fopen 第 106 行 home hugerecruitmetnt public html validatecva p
  • 标准化 UTF-8 到底是什么?

    The 重症监护室项目 http userguide icu project org transforms normalization 现在也有一个PHP库 http us php net manual en class normalize
  • Laravel 中只向登录用户显示按钮

    如果我以 John 身份登录 如何才能只显示 John 的红色按钮而不显示 Susan 的红色按钮 测试系统环境 Win10 Laravel5 4 Mysql5 7 19 table class table table responsive
  • 如何在 PHP 中从 IP 地址/国家/地区名称查找时区 ID?

    谁能告诉我 PHP 中是否有任何方法可以从 IP 地址或国家 地区名称获取时区区域 例如 亚洲 加尔各答 描述 我正在尝试根据他 她的国家 地区设置用户时区 我从他的 IP 地址获取用户所在国家 地区 但我需要该国家 地区的时区区域 例如
  • FireFox 中的自动滚动

    我的应用程序是实时聊天 我有一个 Div 来包装消息 每条消息都是一个 div 所以 在几条消息之后 我的 DOM 看起来像这样 div div Message number two div div div div
  • 一次播种多行 laravel 5

    我目前正在尝试为我的用户表播种 如果我像这样尝试 2 行 就会失败 如果我只使用单个数组而不是 users 数组内的 2 个数组来创建一些假数据 那么效果很好 我做错了什么 正确的方法是什么 class UserTableSeeder ex
  • 使用 C# 读取 Soap 消息

  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • 使用 powershell 将 XML 转换为特定的 JSON 结构

    需要有关将 xml 转换为特定 json 结构的帮助 XML 看起来像这样

随机推荐

  • 在 Spark 中迭代每一列并找到最大长度

    我是 Spark scala 的新手 我有以下情况 我在集群上有一个表 TEST TABLE 可以是配置单元表 我正在将其转换为数据框 作为 scala gt val testDF spark sql select from TEST TA
  • 使用向量代替循环

    我有一个巨大的矩阵 我刚刚给出了一个具有大小的矩阵的示例 1 1000000 我正在使用简单Loop 我不喜欢使用Loop 来找到k where k k ii abs a ii 1 2 a ii a ii 1 a ii 1 2 a ii a
  • GridLayout 和行/列跨度问题

    The Android 开发者博客文章介绍GridLayout显示了跨度如何影响自动索引分配的图表 我正在尝试使用GridLayout 这是我到目前为止所拥有的
  • MySQL、utf8_general_ci 和西里尔字符

    MySQL 版本 4 1 及其排序规则 utf8 general ci 似乎不喜欢特定的西里尔字符 和 适用于 MySQL 5 0 及以上版本 由于该字段用于存储俄语以外的语言 英语 爱沙尼亚语 德语 的信息 因此更改排序规则的类型是不可想
  • 在 AWS IOT 中调用 getShadow/updateShadow 时出现 ForbiddenError 403

    我有带有联合 ID 的经过身份验证的用户 但是当我尝试访问 AWS IOT 内容时 我收到了这个错误 这让我发疯 我正在关注iot sample code 所有相关凭证也都是正确的 MQTTHelper credentialsProvide
  • 重定向子进程的输出

    有多种方法可以重定向子进程的输出 using freopen 3 using dup 3 using popen 3 如果需要的话 应该选择什么是执行子进程并将其输出保存在给定文件中 非常类似于ls gt files txt works s
  • 在多页中获取 Activecontrol

    我正在尝试获取该名称Listbox我刚刚选择的 ListBox1 Caveat ListBox1位于Multipage1 在第一个选项卡上 Private Sub ListBox1 Click Dim m As String m Me Ac
  • 在 Ubuntu 14.04 上的 Python 2.6 上安装 M2Crypto 0.20.1

    我需要在 Ubuntu 14 04 上从 Python 2 6 的源代码编译并安装 M2Crypto 0 20 1 我现在无法迁移到 Python2 7 但我们正在计划这样做 我安装了Python2 6https launchpad net
  • 使用 Sass 定制引导程序;我到底应该在我的 scss 文件中导入 bootstrap 吗?

    在尝试使用 Sass 自定义引导程序时 我注意到覆盖默认引导程序变量似乎以一种不连贯的方式工作 并且希望有人可以解释到底发生了什么导致这种行为 某些变量似乎只有在导入 bootstrap 之前声明时才会被覆盖 其他变量似乎只有在导入 boo
  • 当密钥未翻译时使用默认语言后备

    我可以使用默认语言 例如英语 作为其他语言的 Localized strings 文件中的未翻译键吗 为此 您可以使用英文单词作为 Localized strings 文件中的键 另一种方法是检查 NSLocalizedString 的结果
  • 如何在悬停子元素时更改父元素的颜色

    我有一个带有社交链接的 div 当悬停任何具有不同颜色的锚点时 我想使背景颜色填充整个 div 具体取决于悬停的链接 目前 背景仅在锚文本下方发生变化 我正在研究使用纯 CSS 为整个父级填充子级背景颜色的方法 social width 4
  • JPA:如何在静态 JPA 元模型中对 NUMBER 列执行 LIKE?

    我确实有一个带有 NUMBER 实际上是 BigDecimal 不要问为什么 列的静态元模型 现在我想对该数字列进行 LIKE 查询 CriteriaBuilder cb cb like entity get Entity numberco
  • 如何链接多个 Promise?

    我不太确定 也许我错过了一些明显的东西 但我不知道如何链接两个承诺 我的基于回调的代码看起来像这样 async series function cb Create the directory if the nodir switch isn
  • 为什么 Erlang 中阶乘不会溢出堆栈?

    module demo export factorial 1 factorial 0 gt 1 factorial N gt N factorial N 1 阶乘不是尾递归 但为什么它不会溢出堆栈 我能够在没有堆栈溢出的情况下获得 100
  • 将未定义的类设为友元,然后再定义它

    交一个不认识的朋友 template
  • 一次性更改多个文件的 EOL

    Notepad 或者甚至使用其他工具 有什么方法可以自动更改行结尾一次性处理多个文件 即转换 Windows EOL 的混合 CRLF 和 UNIX EOL LF 文件全部为 Windows EOL CRLF The Replace对话框可
  • 将 printf 重定向到两个流

    我正在扩展一个现有的 C 项目 将所有信息打印到stdout with printf 我希望将此信息打印到标准输出和日志文件 如果我是原始项目的贡献者 我会替换所有printf使用我的自定义日志函数进行调用 唉 我不是 所以这是我的问题 是
  • SQL 包含问题

    谁可以给我解释一下这个 我有两个查询及其结果如下 query select from tbl where contains name he AND ca 结果集 赫兹租车 海明威的小酒馆 query select from tbl wher
  • Unity 3D/球体中的翻转法线

    我已经为我的游戏编写了这段代码 我想要的是统一翻转纹理上的法线 我有一个模型和一个纹理 希望纹理位于球体模型内部而不是外部 我想通过在翻转纹理顶部的球体内部的图像周围移动相机来创建 360 度全景效果 现在 当我第一次按下播放按钮时 它运行
  • PHP domDocument 删除子节点的子节点

    如何删除子节点的父节点 但保留所有子节点 XML 文件是这样的