2012-04-19 74 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,并选择你觉得最舒服