2013-01-05 98 views
1

可能重複:
how to write into existing xml file using php寫入到現有的XML文檔

我試圖寫入使用SimpleXML(像馬修說,在how to write into existing xml file using php)現有的XML文件中,除了我的XML文件有更多的項目(這不是我的XML文件的實際結構,我只是用它作爲示例)。

<Books> 
<Authors> 
    <WeiMengLee> 
     <Book>Beginning iOS 4 Application Development</Book> 
    </WeiMengLee> 
</Authors> 
</Books> 

所以我的問題是,如何在PHP中使用SimpleXML爲「WeiMengLee」項添加一個新的「Book」?

+0

這工作**一模一樣的**,你只要孩子添加到不同的元素。請參閱[*示例#10添加元素和屬性*](http://php.net/simplexml.examples-basic#example-5287) – hakre

+1

您需要重新考慮您的xml結構。是關於書籍還是作者?目前你似乎有點混淆。 – vascowhite

+0

@vascowhite這不是我的XML文件的實際外觀,我以此爲例。 –

回答

1

as vascowhite above above,rethink your xml file of the structure。無論如何,這裏是一些代碼,打開xml文件,循環遍歷所有可用的書籍,並打印出標題,然後向該部分添加一本新書,最後將文件保存到磁盤。確保xml文件可以被你的web服務器執行你的php腳本的用戶寫入。

//read info from xml file to structured object 
$xml = new SimpleXMLElement('bla.xml', null, true); 

//loop all available books for wei meng lee 
foreach($xml->Authors->WeiMengLee->Book as $book) 
{ 
    //print book title + newline 
    print $book . "<br />"; 
} 

//add a new book entry to your xml object 
$xml->Authors->WeiMengLee->addChild("Book", "HERE GOES THE TITLE"); 

//save the changes back to the xml file 
//make sure to set proper file access rights 
//for bla.xml on the webserver 
$xml->asXml('bla.xml'); 

希望這有助於8)

+0

謝謝!那正是我需要的!我只有一個問題,我的xml文件需要放在我的服務器上? –

+0

無論它位於何處,只要您從調用它的腳本相對於它給出正確的路徑,如下所示:「../../my-xml-files/books/book-collection.XML」 –

+0

@ rodrigo-silveira好的。謝謝您的幫助! –

0

您需要決定,如果你的XML是有關書籍或約作者。

如果是有關書籍,那麼就應該是這個樣子: -

<?xml version="1.0"?> 
<books> 
    <book> 
     <title>Beginning iOS 4 Application Development</title> 
     <author>WeiMengLee</author> 
    </book> 
</books> 

然後,您可以添加一個新的書是這樣的: -

$xml = new SimpleXMLElement("filename.xml", null, true); 

$book = $xml->addChild('book'); 
$book->addChild('title', 'Another Book'); 
$book->addChild('Author', 'WeiMengLee'); 
$xml->asXML('filename.xml'); 

輸出: -

<?xml version="1.0"?> 
<books> 
    <book> 
     <title>Beginning iOS 4 Application Development</title> 
     <author>WeiMengLee</author> 
    </book> 
    <book> 
     <title>Another Book</title> 
     <Author>WeiMengLee</Author> 
    </book> 
</books> 

另一方面,如果您的xml是關於作者的,那麼它應該看起來像這樣: -

<?xml version="1.0"?> 
<authors> 
    <author> 
     <name>WeiMengLee</name> 
     <books> 
      <book>Beginning iOS 4 Application Development</book> 
     </books> 
    </author> 
</authors> 

,你會增加另一本書是這樣的: -

$xml = new SimpleXMLElement("filename.xml", null, true); 

foreach($xml as $author){ 
    if($author->name == 'WeiMengLee'){ 
     $weimenglee = $author; 
    } 
} 

$weimenglee->books->addChild('book', 'Another book'); 

$xml->asXML('filename.xml'); 

輸出: -

<?xml version="1.0"?> 
<authors> 
    <author> 
     <name>WeiMengLee</name> 
     <books> 
      <book>Beginning iOS 4 Application Development</book> 
      <book>Another book</bmook> 
     </books> 
    </author> 
</authors> 
+0

感謝您的幫助!我還有一個問題,那麼「filename.xml」文件需要放在我的服務器上?或者可以將「filename.xml」更改爲鏈接(www.notarealwebsite.com/filename.xml)? –

+0

xml文件可以放在PHP可以訪問的任何地方。如你所描述的網址也是可以接受的,請參閱手冊http://php.net/manual/en/simplexmlelement.construct.php – vascowhite

+0

好的,謝謝。我會看看這個。 –