2012-04-19 72 views
0

嗨,我期待着創建一個表單,讓人們可以將新條目上傳到.xml文件中。 表單不是問題,對於我來說,問題是如何將新條目(動態和靜態)添加到現有的.xml文件中。通過PHP添加XML中的條目

我的XML文件看起來像這樣:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<item><provider>Fabian</provider> 
<provider_itemid>1</provider_itemid> 
<name>Robe der Regalia</name> 
<origin>Art: Drop</origin> 
<description>Mindest-Stufe: Keine</description> 
<extension>CLASSIC</extension> 
<position>CHEST</position> 
<online_url>www.google.me</online_url> 
<lastupdate>28.03.2008 09:58:20</lastupdate> 
<realm>Hibernia</realm> 
<level>30</level> 
<quality>95</quality> 
<bonus>20</bonus> 
<armor af="30">CLOTH</armor> 
<effect id="HITPOINTS">27</effect> 
<effect id="ENCHANTMENTS">2</effect> 
<effect id="MENTALISM">2</effect> 
<effect id="VOID">2</effect> 
</item> 
</daoc_items> 

將是巨大的,如果有人有樣! :) 感謝

Update解決方案

<?php 
    $daoc_items = array(); 
    $daoc_items [] = array(
    'name' => 'Skyros-Hammer aus Arkanit', 
    'extensions' => 'test', 
    'description' => 'test', 
    'realm' => 'Midgard', 
    'level' => 'Midgard', 
    'quality' => "99", 
    'bonus' => "99", 
    'position' => "99", 
    'weapon' => "99", 
    'effect' => "99", 
    'origin' => "99", 
); 
    $daoc_items [] = array(
    'name' => 'Skyros-Hammer aus Arkanit', 
    'extensions' => 'test', 
    'description' => 'test', 
    'realm' => 'Midgard', 
    'level' => 'Midgard', 
    'quality' => "99", 
    'bonus' => "99", 
    'position' => "99", 
    'weapon' => "99", 
    'effect' => "99", 
    'origin' => "99", 
); 

    $doc = new DOMDocument(); 
    $doc->formatOutput = true; 

    $r = $doc->createElement("daoc_items"); 
    $doc->appendChild($r); 

    foreach($daoc_items as $item) 
    { 
    $b = $doc->createElement("item"); 

    $name = $doc->createElement("name"); 
    $name->appendChild(
    $doc->createTextNode($item['name']) 
); 
    $b->appendChild($name); 

    $extensions = $doc->createElement("extensions"); 
    $extensions->appendChild(
    $doc->createTextNode($item['extensions']) 
); 
    $b->appendChild($extensions); 

    $description = $doc->createElement("description"); 
    $description->appendChild(
    $doc->createTextNode($item['description']) 
); 
    $b->appendChild($description); 

    $realm = $doc->createElement("realm"); 
    $realm->appendChild(
    $doc->createTextNode($item['realm']) 
); 
    $b->appendChild($realm); 

    $level = $doc->createElement("level"); 
    $level->appendChild(
    $doc->createTextNode($item['level']) 
); 
    $b->appendChild($level); 

    $quality= $doc->createElement("quality"); 
    $quality->appendChild(
    $doc->createTextNode($item['quality']) 
); 
    $b->appendChild($quality); 

    $bonus= $doc->createElement("bonus"); 
    $bonus->appendChild(
    $doc->createTextNode($item['bonus']) 
); 
    $b->appendChild($bonus); 

    $position= $doc->createElement("position"); 
    $position->appendChild(
    $doc->createTextNode($item['position']) 
); 
    $b->appendChild($position); 

    $weapon= $doc->createElement("weapon"); 
    $weapon->appendChild(
    $doc->createTextNode($item['weapon']) 
); 
    $b->appendChild($weapon); 

    $effect= $doc->createElement("effect"); 
    $effect->appendChild(
    $doc->createTextNode($item['effect']) 
); 
    $b->appendChild($effect); 

    $origin= $doc->createElement("origin"); 
    $origin->appendChild(
    $doc->createTextNode($item['origin']) 
); 
    $b->appendChild($origin); 

    $r->appendChild($b); 
    } 

    echo $doc->saveXML(); 
    $doc->save("item.xml") 
    ?> 
+1

做的第一件事之一是確保XML文件形成良好。 ;)(結束標記daoc_items沒有相應的打開標記) – Eineki 2012-04-19 14:16:40

+0

上述XML文檔的根節點無效,請示例代碼實際工作。您想在文檔的哪個位置添加哪些元素? [SimpleXML](http://php.net/manual/en/book.simplexml.php)可能是您的解決方案,但我們需要更多細節。 – DaveRandom 2012-04-19 14:17:02

回答

0

您可以使用構建中的一個XML解析器/班,SimpleXML一樣:

$filename = 'my_xml_file.xml'; 
$items = simplexml_load_file($filename); 

$items->item[0]->addChild('tagname', 'value'); 
$items->asXML($filename); 

ofcourse你必須找到一種方法來確定哪個項目你想添加孩子(檢查行說$items->item[0]現在只是獲得第一項)。

http://nl.php.net/manual/en/book.simplexml.php閱讀文檔,也看看其它XML操作類,特別是DOM,並選擇你覺得最舒服