0

如何使用 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");

基本上,它所做的是从一个 url 中获取两个标题,旧的现有标题,以及用户想要将其更改为的一个(就像这样oldtitle|^newtitle),并将它们放入一个数组中。

我尝试做的是删除现有的旧标题,然后使用 url 中的新标题值制作一个新标题,但它似乎不起作用。我哪里错了,或者有更简单的方法吗?

4

1 回答 1

1

做到这一点的方法是使用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");
于 2013-04-20T00:03:35.363 回答