2011-11-16 6 views
0

以下のスクリプトを使用して、入力フィールドからXMLファイルにテキストを追加しています。私はリストの一番上にアイテムを追加するのは混乱しています、おそらくfirstChild?なぜなら、PHPが入力フィールドからテキストをポストするとXMLツリーの最下部に追加されるので、それがツリーの最初のアイテムになるのはどうしてですか?PHP addChildをリストの先頭に追加しますか?

<?php 

if ($_POST['post']) { 
$xml = simplexml_load_file('feed.xml'); 
$item = $xml->channel->addChild('item'); 
$item->addChild('title', htmlspecialchars($_POST['post'])); 


file_put_contents('feed.xml', $xml->asXML()); 
} 
?> 

ここでは、XMLをどのように見せたいかを示します。

<?xml version="1.0" encoding="UTF-8"?> 
<rss version="2.0"> 
    <channel> 
     <item> 
      <title>Item 3</title> 
     </item> 
     <item> 
      <title>Item 2</title> 
     </item> 
     <item> 
      <title>Item 1</title> 
     </item> 
    </channel> 
</rss> 
+0

と同様の質問へのリンクは、あなたがのSimpleXMLで挿入位置を指定することができます信じてはいけません。しかし、完全なDOMでは、 'insertBefore()'を使って、子リストの最上部にノードを挿入することができます。 –

+0

insertBefore()はaddChildを置き換えますか? –

+0

いいえ、DOMには後に(または最後に)追加するためのappendChildがあります。どちらもノードを挿入しますが、別の場所に新しいノードを挿入します。 –

答えて

0

ここに答え

How to prepend a child in Simple XML

class my_node extends SimpleXMLElement 
{ 
    public function prependChild($name) 
    { 
     $dom = dom_import_simplexml($this); 

     $new = $dom->insertBefore(
      $dom->ownerDocument->createElement($name), 
      $dom->firstChild 
     ); 

     return simplexml_import_dom($new, get_class($this)); 
    } 
} 

if ($_POST['post']) { 
$xml = simplexml_load_file('feed.xml'); 
$item = $xml->channel->prependChild('item'); 
$item->addChild('title', htmlspecialchars($_POST['post'])); 
file_put_contents('feed.xml', $xml->asXML()); 
} 
+0

さて、あなたたちが今何を意味しているのか分かります。しかし何らかの理由で私の状況では機能しません。まだ前の子の下に子を追加します... –

関連する問題