0
我在PHP中处理XML时遇到了问题。我想要的是删除不需要的元素,并用另一个替换它。编辑XML文件(删除节点并添加新文件)
比方说,XML是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<software>
<info>
<version>1.2</version>
<lasterror>1386680712</lasterror>
</info>
<decryption>
<funcgroup siglength="86">
<func>
<name>Mk</name>
<args>$a</args>
<code>XXXX</code>
</func>
<func>
<name>Nk</name>
<args>$a,$b</args>
<code>XXXX</code>
</func>
</funcgroup>
</decryption>
</software>
PHP代码:
$domtree = new DOMDocument('1.0', 'UTF-8');
$domtree->loadXML(file_get_contents('test.xml'));
$thedocument = $domtree->documentElement;
$list = $thedocument->getElementsByTagName('funcgroup');
foreach ($list as $domElement) {
$sig_length = $domElement->getAttribute('siglength');
if($sig_length == $signature_length) {
$domElement->parentNode->removeChild($domElement);
break;
}
}
$some_stuff = $domtree->getElementsByTagName('software');
$some_stuff = $domtree->getElementsByTagName('decryption');
$funcgroup = $domtree->appendChild($domtree->createElement('funcgroup'));
$funcgroup->setAttribute('siglength', $signature_length);
$func = $funcgroup->appendChild($domtree->createElement('func'));
$func->appendChild($domtree->createElement('name', $outer_element[0]));
$func->appendChild($domtree->createElement('args', $outer_element[1]));
$code = $func->appendChild($domtree->createElement('code'));
$code->appendChild($domtree->createTextNode($outer_element[2]));
注:我删除了一些东西,否则会太复杂,我猜。上面的代码显示了我做了什么,但是没有其他一些在那个问题中不需要的循环和变量。每个变量(和数组)都被定义。所以不要担心这一点。
我想要的是删除整个<funcgroup siglength="86">
以取代它与另一个。
该脚本工作正常,但在输出XML中有一个问题。它看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<software>
<info>
<version>6.3</version>
<lasterror>1386680712</lasterror>
</info>
<decryption/>
</software>
<funcgroup siglength="86">
<func>
<name>Nk</name>
<args>$a</args>
<code>YYYYY</code>
</func>
<func>
<name>Ok</name>
<args>$a,$b</args>
<code>YYYY</code>
</func>
</funcgroup>
正如你看到的,封闭software
和decryption
标签是在错误的地方了。
我该如何解决这个问题?我花了几个小时,但找不到工作解决方案。
这个问题是由removeChild()
造成的,因为它工作正常,如果我不删除的东西。
谢谢,但现在我得到了'致命错误:调用未定义的方法DOMNodeList :: appendChild()'。 XML是如此令人困惑的LOL。特别是当你以前从来没有处理过它。我感谢您的帮助。 – Michael
@Michael更正 - 项目(0)失踪。 – vbence
哦,男士:D非常感谢!你不知道我现在有多幸福。在这上面浪费了很多时间。谢谢! <3 – Michael