XML 从数组中搜索节点并将新数据添加到新节点

Posted

技术标签:

【中文标题】XML 从数组中搜索节点并将新数据添加到新节点【英文标题】:XML search for a node from an array and add new data to a new node 【发布时间】:2012-01-08 18:20:00 【问题描述】:

从本教程 - 在 phpFreaks 上添加节点的部分中,我确实在那里发帖,但没有收到奇怪的回复,因为教程是由他们编写的。

http://www.phpfreaks...ndling-xml-data

当我使用我的 xml 文件时,它会创建节点但不会插入新数据。没有页面错误。我确定我只是错过了一些非常简单的事情,经过数小时的尝试,我现在将鞠躬寻求帮助。

这是我正在使用的脚本

<?php
// isbn => pages
$page_numbers = array(
                     '1234' => '654', // insert data into catparent node
                     '5678' => '789', // insert data into catparent node
                );
$dom = new DOMDocument();
$dom->load('edtest.xml');
$xpath = new DOMXPath($dom);
$items = $xpath->query('item');
foreach($items as $item)

  $item->appendChild($dom->createElement('catparent', $page_numbers[$item->getAttribute('catcode')]));

$dom->save('edtest_new.xml');
?>

我的 XML

<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>
<catcode>1234</catcode>
<catdesc>Systems - System Bundles</catdesc>
<price_cost>999.95</price_cost>
<price_sell>999.95</price_sell>
</item>
</items>

输出 XML

<?xml version="1.0" encoding="UTF-8"?>
<items>
<item>
<catcode>1234</catcode>
<catdesc>Systems - System Bundles</catdesc>
<price_cost>999.95</price_cost>
<price_sell>999.95</price_sell>

<catparent></catparent> // it creates but does not insert required data

</item>
</items>

它运行脚本创建所需的节点,但它不插入所需的数据。该脚本的目标是找到&lt;catcode&gt; = 1234 并添加一个新的&lt;catparent&gt; &lt;/catparent&gt;,其中包含数组中所需的数据。

如果有更好的方法来实现结果或只是需要的更正。

谢谢

【问题讨论】:

【参考方案1】:

您正在使用$item-&gt;getAttribute('catcode')。但是,catcode 不是&lt;item&gt; 的属性,它是一个子元素。

试试

$catcode = $item->getElementsByTagName('catcode');
$parent_code  = $page_numbers[ $catcode[0] ];

$item->appendChild( $dom->createElement('catparent', $parent_code) );

【讨论】:

谢谢,但我有点迷路了,所以我会在脚本的哪个位置插入代码。 @Karl:显然是在 foreach 循环中。 '654', // 灿烂的一千个太阳 '5678' => '789', // Oscar Wao 短暂的奇妙人生; $dom = 新的 DOMDocument(); $dom->load('edtest1.xml'); $xpath = 新 DOMXPath($dom); $items = $xpath->query('item'); foreach($items as $item) $catcode = $item->getElementsByTagName('catcode'); $parent_code = $page_numbers[ $catcode[0] ]; $item->appendChild( $dom->createElement('catparent', $parent_code) ); $dom->save('edtest_new.xml'); ?> 抱歉 Tomalak 我真的以为我已经理解了这个 xml 但是 - 好吧,我想我在这里有点过头了。当我执行上述操作时,它在第 15 行出现错误,我没有看到拼写错误 Karl 所以我添加了你的代码,但它给出了一个错误,我改变了'code' $catcode = $item->getElementsByTagName('catcode'); '代码' $catcode = $item->getElementsByTagName['catcode']; 1234Systems - System Bundles5678 硬盘 - SATA

以上是关于XML 从数组中搜索节点并将新数据添加到新节点的主要内容,如果未能解决你的问题,请参考以下文章

kafka集群扩容后的数据迁移

无法将从 Firebase 获取的数据添加到新数组

hdfs-site.xml 用于添加新的数据节点

如何优化在`django-mptt`中添加新节点?

xml 这些示例显示将搜索参数传递到查询字符串或从发布数据传递到节点查询

如何解决尝试将对象数组中的数据存储到新对象中的错误