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 から 2 つのタイトル、古い既存のタイトル、およびユーザーが変更したいタイトル (このように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 に答える