如何使用PHP通过Web表单更新XML文件:表单名称问题

时间:2011-05-22 14:28:38

标签: php xml forms

我已经对tis进行了一些搜索,但似乎无法找到关于这个主题的任何简单方法或其他示例(我是几个月前的PHP,XML新手,所以请耐心等待:))。

  • 我有一个填充了可用数据的XML文件
  • 我需要能够将整个XML文件加载到表单中,每个子节点都加载到自己的表单字段中
  • 我想修改各个字段
  • 然后使用PHP解析数据将所有内容保存回同一XML文件

问题:如何标记表单字段中的“名称”,以便我知道如何填充正确的子节点。 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表单更新此内容,我认为最好让INPUT字段中的name属性与子节点名称相同....但是我将拥有2个x组和2个成员。

我应该以某种方式将属性附加到名称的末尾,以便

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

(使用PHP DOM可以找到$ group.1和$ group.2)

然后我在php $ _POST数组中有一个唯一的名称/值对,用于通过DOM更新XML文件。

这一切似乎都非常骇人和笨重,我想知道是否有更优雅的方式来完成所有这些。再一次,对此非常新......可能已经有一些明显的方法可以做到这一点,我完全不知道了。

感谢任何帮助人员

先生。乙

1 个答案:

答案 0 :(得分: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";
        }
    }
}