如何使用PHP来更新通过web形式的XML文件:表单名称问题
问题描述:
我已经做了那朵一些搜索,但似乎无法找到关于这个问题没有简单的方法或其他的例子(我是新来的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君
答
首先,你的 “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";
}
}
}
是的,对不起,我在这里意外地遗漏了根部。它真的存在于文件中:)至于“循环”,我了解在....中读取XML文件的方式,但困难在于在Web表单输入字段中提供适当的NAME。从上面的例子中我会有2个MEMBER字段。所以问题是,我如何在Web表单中唯一标记它们,然后相应地更新XML?谢谢 – Morph 2011-05-22 19:30:53
哦,起初不明白。有关输入的名称,您可以创建一个数组,请参阅编辑 – 2011-05-22 21:38:30
Hi Carlo。所以,我可以在foreach循环中用必要的XML更新替换几行,例如使用simpleXML我猜.....我希望我已经错过了一个干净的方式来做到这一点(你的数组建议真的有帮助)。感谢您花时间和精力考虑我的问题,并将其输入,因为我非常感谢!我会稍微发布我的解决方案,以供其他人阅读此主题。谢谢!! :) – Morph 2011-05-22 22:21:21