2009-04-07 12 views
3

これについてオンラインで見つけることができる例はすべて、ドキュメントルートのXMLファイルにコンテンツを追加するだけですが、実際にはそれを深くする必要があります。PHP DOMをルートよりも深く使用してXMLに新しい要素を追加するにはどうすればよいですか?

私のXMLファイルは単純で、私が持っている:

<?xml v1 etc> 
<channel> 
<screenshots> 
<item> 
    <title>Image Title</title> 
    <link>www.link.com/image.jpg</link> 
</item> 
</screenshots> 
</channel> 

私はタイトルとリンクした新しい「アイテム」の要素、それぞれを追加されて行うことができるようにしたいすべて。私はPHP DOMを使用する必要があることを知っていますが、ドキュメント全体を上書きするのではなく、「スクリーンショット」内にデータを追加するようにコードを作成する方法については困惑しています。私はXPathも使う必要があるかもしれないという疑いがありますが、私はどのように考えているのですか?

私はオンラインの例からつなぎ合わせているコードは、このようになります(私はそれが間違っている確信している)ドキュメントルートのXMLファイルにコンテンツを追加すること

$newshottitle = "My new screenshot"; 
$newshotlink = "http://www.image.com/image.jpg"; 

$dom = newDomDocument; 
$dom->formatOutput = true; 
$dom->load("../xml/screenshots.xml"); 

$dom->getElementsByTagName("screenshots"); 
$t = $dom->createElement("item"); 
$t = $dom->createElement("title"); 
$t->appendChild($dom->createTextNode("$newshottitle")); 

$l = $dom->createElement("link"); 
$l->appendChild($dom->createTextNode("$newshotlink")); 

$dom->save("../xml/screenshots.xml"); 

答えて

8

、私は実際に必要としますそれよりも深くする。

あなたは現在のところどこにコンテンツを追加していません! < title>と<というリンクを持つ要素ノードを作成しても、何もしません。 < item>要素ノードのappendChildに渡す必要があります(現在も作成していますが、すぐに変数に割り当てないことで捨ててしまいます)。ここで

は出発点です:

$screenshots= $dom->getElementsByTagName("screenshots")[0]; 

$title= $dom->createElement("title"); 
$title->appendChild($dom->createTextNode($newshottitle)); 
$item= $dom->createElement("item"); 
$item->appendChild($title); 
$screenshots->appendChild($item); 
+0

おかげでbobince、私はそこにPHPのドキュメントのさまざまなバージョンによって混乱したので、私を見つけただけでなく、DOMとDOMの両方XMLの例がそこにいますから選択する。 – FishFingers

関連する問題