2011-05-22 13 views
0

我已经做了那朵一些搜索,但似乎无法找到关于这个问题没有简单的方法或其他的例子(我是新来的PHP,XML作为一对夫妇几个月前,所以忍受我:))。如何使用PHP来更新通过web形式的XML文件:表单名称问题

  • 我有填充可用数据的XML文件
  • 我需要能够对整个XML文件加载到形式,每个子节点加载到自己的表单字段
  • 我想修改各个领域
  • 并保存一切回到同一个XML文件,使用PHP解析数据

问题:如何标记“名”的表单字段,所以我知道如何填充适当的儿童节点。 XML文件的样子:

<band id="1"> 
<group>Guns N Roses</group> 
<member>Duff</member> 
</band> 
<band id="2"> 
<group>Iron Maiden</group> 
<member>Paul</member> 
</band> 

要通过Web表单更新此我想最好有在输入字段一样的子节点名称的名称属性....不过那时候我也将有2 x组和2个成员。

如果我莫名其妙的属性附加到名称,结束该

<input name=group.1 value=$group.1> 
<input name=group.1 value=$group.2> 

,然后(其中$ group.1和$ group.2可以使用PHP DOM中找到)我在PHP $ _POST数组中有一个唯一的名称/值对,用于通过DOM更新XML文件。

这一切只是看起来很hackish的和笨重的,我不知道是否有做这一切的更优雅的方式。再一次,这是非常新的......也许已经有一些明显的方式来做到这一点,我完全失踪了。

感谢所有帮助球员

B君

回答

0

首先,你的 “XML” 不是有效的XML。它需要有一个包含所有内容的根元素。现在,你缺少这个根元素,因为在顶层你有多个元素(......)。

所以通过包装你的整个字符串转换成另外一个元素正确的:

$xml = "<root>$xml</root>"; 

然后将其加载在一个DOMDocument元素,并通过它与DOMXPath或SimpleXML对象遍历和循环(这可能更快编码,不确定性能)。

编辑:如何命名为一个简单的更新表单元素:

<input name="band[1][group]" value="$group1"> 
<input name="band[1][member]" value="$member1" /> 

<input name="band[2][group]" value="$group1"> 
<input name="band[2][member]" value="$member1" /> 

后您通过邮寄的形式,你可以遍历所有的投入做了foreach$_POST['band']阵列:

if (count($_POST) > 0) 
{ 
    if (is_array($_POST['band']) 
    { 
     foreach ($_POST['band'] as $id => $band) 
     { 
      echo "Band $id has group ".$band['group']." and member ".$band['member']."<br />\n"; 
     } 
    } 
} 
+0

是的,对不起,我在这里意外地遗漏了根部。它真的存在于文件中:)至于“循环”,我了解在....中读取XML文件的方式,但困难在于在Web表单输入字段中提供适当的NAME。从上面的例子中我会有2个MEMBER字段。所以问题是,我如何在Web表单中唯一标记它们,然后相应地更新XML?谢谢 – Morph 2011-05-22 19:30:53

+0

哦,起初不明白。有关输入的名称,您可以创建一个数组,请参阅编辑 – 2011-05-22 21:38:30

+0

Hi Carlo。所以,我可以在foreach循环中用必要的XML更新替换几行,例如使用simpleXML我猜.....我希望我已经错过了一个干净的方式来做到这一点(你的数组建议真的有帮助)。感谢您花时间和精力考虑我的问题,并将其输入,因为我非常感谢!我会稍微发布我的解决方案,以供其他人阅读此主题。谢谢!! :) – Morph 2011-05-22 22:21:21

相关问题