2016-11-25 48 views
0

我覺得這個任務是不是要拼命,但它看起來像我不能看着辦吧......多的孩子加入到一個XML元素與PHP

這是我的數據有:

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

我想在註冊時將這些文件存儲在名爲accounts.xml的XML文件中。這個問題不是關於整個過程,我只是想知道如何存儲這個正確的。該過程後,我想在我的XML文件有這些新的結構:

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

這是我使用至今的代碼:我嘗試了一些變化

 $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()); 

,但通常我結束了像這樣的東西:

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

正如你可以看到我有多個問題:

1:< 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()); 

解決

0

我強烈建議使用DOM或XMLWriter的創建XML。 Apis更乾淨更強大。在DOM它有2個部分組成:

  1. 使用DOMDocument方法等createElement()創建節點,createTextNode()
  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