使用PHP脚本更新XML文件

时间:2009-12-31 05:29:15

标签: php xml

我正在创建一个界面网站来更新乐队网站上的音乐会列表。 该列表存储为XML文件,具有以下结构:

我已经编写了一个脚本,可以让我在列表中添加一个新的gig,这个相对容易... 现在我想编写一个脚本,使我能够编辑列表中的某个演出。 由于第一个属性:“id”,每个Gig都是唯一的。 我想使用此引用来编辑该节点中的其他属性。 我的PHP非常差,所以我希望有人能把我放在这里... 我的PHP脚本:

2 个答案:

答案 0 :(得分:2)

嗯,我不知道你的XML结构是什么样的,但是:

<gig id="someid">
 <venue></venue>
 <day></day>
 <month></month>
<year></year>
</gig>

$xml = new SimpleXmlElement('gig.xml',null, true);
$gig = $xml->xpath('//gig[@id="'.$_POST['id'].'"]');
$gig->venue = $_POST['venue'];
$gig->month = $_POST['month'];
// etc..

$xml->asXml('gig.xml)'; // save back to file

现在,如果所有这些数据点都是属性,则可以使用$gig->attributes()->venue来访问它。

除非您使用一个帖子进行多次更新,否则不需要循环 - 您可以通过XPAth查询获取任何特定记录。 SimpleDML也比DOMDOcument更轻,更易于使用这种类型的东西 - 特别是因为你没有使用DOMDocument的功能。

答案 1 :(得分:1)

您需要使用

domdocument中加载xml文件
<?
$xml = new DOMDocument();
$xml->load("xmlfile.xml");
//find the tags that you want to update
$tags = $xml->getElementsByTagName("GIG");
//find the tag with the id you want to update
foreach ($tags as $tag) {
   if($tag->getAttribute("id") == $id) { //found the tag, now update the attribute
      $tag->setAttribute("[attributeName]", "[attributeValue]");
   }
}

//save the xml
$xml->save();
?>

代码未经测试,但这是一个大致的想法