如何使用PHP重命名xml中的值?这是我到目前为止所得到的:
<?php
$q = $_GET["q"];
$q = stripslashes($q);
$q = explode('|^', $q);
$old = $q[0];
$dom = new DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->Load("test.xml");
$xpath = new DOMXPath($dom);
$query1 = 'channel/item[title="' . $old . '"]/title';
$entries = $xpath->query($query1);
foreach ($entries as $entry)
{
$oldchapter = $entry->parentNode->removeChild($entry);
$item = $dom->getElementsByTagName('item');
foreach ($item as $items)
{
$title = $dom->createElement('title', $q[1]);
$items->appendChild($title);
}
}
$dom->save("test.xml");
基本上,它的作用是从网址中获取两个标题,旧的现有标题,以及用户想要将其更改为的标题(如此oldtitle|^newtitle
),并将它们放入数组中。 / p>
我尝试过做的是删除现有的旧标题,然后使用网址中的新标题值创建一个新标题,但它似乎不起作用。我哪里出错了,或者有更简单的方法吗?
答案 0 :(得分:2)
执行此操作的方法是使用DOMNode::replaceChild()
。你的大部分代码都是正确的,你只是稍微过度复杂了一些DOM的东西。
试试这个:
<?php
$q = $_GET["q"];
$q = stripslashes($q);
$q = explode('|^', $q);
$old = $q[0];
$dom = new DOMDocument;
// Do this *before* loading the document
$dom->preserveWhiteSpace = false;
$dom->formatOutput = true;
$dom->Load("test.xml");
$xpath = new DOMXPath($dom);
$query1 = 'channel/item[title="' . $old . '"]/title';
$entries = $xpath->query($query1);
// This is all you need to do in the loop
foreach ($entries as $oldTitle) {
$newTitle = $dom->createElement('title', $q[1]);
$entry->parentNode->replaceChild($newTitle, $oldTitle);
}
$dom->save("test.xml");