我之前实际上曾经问过这个问题,但是有人说PC已经解决了我的解决方案,而且我再也无法让以前的解决方案起作用了。
我正在尝试向下面的XML添加一个新元素:
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
<comments>
<comment>
<date>20120509</date>
<time>10:21:05</time>
<name>Lucy</name>
<text>Hello etc</text>
</comment>
<comment> ...etc
我正在使用的PHP代码是:
$xml = new DOMDocument('1.0', 'utf-8');
$xml->load(filename.xml);
$parent = $xml->firstChild;
$refnode = $parent->firstChild;
$new = $parent->insertBefore($xml->createElement('comment'), $refnode);
但是,这会在“data”标记后面添加一个新的“注释”,如果我尝试使用$new->addChild(tag, value)
添加子项(例如“date”,“time”等...),我得到一个“未定义的方法”错误。我尝试了各种排列,但没有任何作用。
期望的结果将是:
<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
<comments>
*<comment>
<date>20140225</date>
<time>17:39:05</time>
<name>Derek</name>
<text>New comment text</text>
</comment>*
<comment>
<date>20120509</date>
<time>10:21:05</time>
<name>Lucy</name>
<text>Hello etc</text>
</comment>
<comment> ...etc
答案 0 :(得分:0)
您的XML文件很可能包含您示例中的空白字符。这些被解释为文本节点,这使得firstChild
无法获得您想要的那些元素之一。
您必须迭代孩子而获得第一个孩子,实际上是DOMElement
。你也必须比你做得更深一层。请参阅附加的源代码,它输出您想要的结果。
<?php
$xml = new DOMDocument();
$xml->loadXML('<?xml version="1.0" encoding="UTF-8"?>
<data>
<comments>
<comment>
<date>20120509</date>
<time>10:21:05</time>
<name>Lucy</name>
<text>Hello etc</text>
</comment>
</comments>
</data>');
$parent = $xml->firstChild;
foreach ($parent->childNodes as $c) {
if ($c instanceof DOMElement) {
$refnode = $c;
break;
}
}
foreach ($refnode->childNodes as $c) {
if ($c instanceof DOMElement) {
$refnode2 = $c;
break;
}
}
$insert = $xml->createElement('comment', 'test');
$refnode->insertBefore($insert, $refnode2);
echo $xml->saveHTML();