2016-11-25 16 views
0

持つ1つのXML要素にこれは私が持っているデータである...私はこのタスクは難しいことではないと思うが、私はそれを把握することができないように見えるPHP

を複数の子を追加します。

 $_SESSION["username"] 
     $_SESSION["id"] 

登録時にaccounts.xmlという名前のXMLファイルにこれらを保存します。この質問はプロセス全体についてのものではなく、私はこれを正しい方法で保存する方法が不思議です。これは私がこれまで使っていたコードである

 <account> 
      <username> value of $_SESSION["username"] </username> 
      <user_id> value of $_SESSION["id"] </user_id> 
     </account> 

:プロセスの後、私は私のXMLファイルにこれらの新しい構造を持つようにしたい

 $xml = simplexml_load_file('accounts.xml'); 

     $new = new SimpleXMLElement("<account></account>"); 
     $new->addChild('username', '$_SESSION["username"]'); 
     $new->addChild('user_id', '$_SESSION["id"]'); 

     file_put_contents('accounts.xml', $xml->asXML()); 

私はいくつかのバリエーションを試してみましたが、通常私は終わりますこのようなもので:

1:01:

 <username> $_SESSION["username"] 
      <user_id> $_SESSION["id"] </user_id> 
     </username> 

私は複数の問題を抱えて見ることができるようにaccount>要素は作成されません。 2:user_idはユーザー名の中にあります - 私はそれを望みません と3:変数自体はその値ではなくファイルに保存されています...

私は正しいことを手伝ってください、 ここに?

注:それは別の登録を実行している場合、このコードは、事前に

おかげ上に掲載され、単純に他の構成を追加して、何かを削除または上書きすることなく、再び動作すること、が重要です!

+0

これはタイプミスですが、 '$ xml'を' $ new'ではなくファイルに保存していますか? – Parfait

答えて

0
 $xml = simplexml_load_file('accounts.xml'); 


     $account = $xml->addChild('account'); 
     $account->addChild('username', $_SESSION["username"]); 
     $account->addChild('user_id', $_SESSION["id"]); 


     file_put_contents('accounts.xml', $xml->asXML()); 

は、私は強くXMLを作成するために、DOMやするXMLWriterを使用することをお勧め

0

を解決しました。 Apisははるかにクリーンで強力です。 DOMには2つの部分があります

  1. createElement()createTextNode()ようDOMDocument方法を使用してノードを作成します。
  2. また、あなたがそれを変更するノードのプロパティとメソッドを使用することができます...、appendChild()insertChild()を使用して、その親(ドキュメントまたは要素)へ

をノードを追加します。

$document = new DOMDocument(); 
$account = $document 
    ->appendChild($document->createElement('account')); 
$account 
    ->appendChild($document->createElement('username')) 
    ->appendChild($document->createTextNode('John Doe')); 
$account 
    ->appendChild($document->createElement('user_id')) 
    ->appendChild($document->createTextNode(42)); 
$document->formatOutput = TRUE; 
echo $document->saveXml(); 

するXMLWriter:

$writer = new XMLWriter(); 
$writer->openMemory(); 
$writer->setIndent(true); 
$writer->startDocument('1.0', 'utf-8'); 
    $writer->startElement('account'); 
    $writer->writeElement('username', 'John Doe'); 
    $writer->writeElement('user-id', 42); 
    $writer->endElement(); 
$writer->endDocument(); 
echo $writer->outputMemory(); 

あなたはXML文書内の何かがノードであることを心に留めておく必要があります。要素、属性、cdataセクションなどSimpleXMLは限られており、その部分にアクセスすることができます。

+0

ありがとうございました。私はこれを念頭に置いて、それに戻ってすぐに実装します! – Maxischl

関連する問題