2009-12-31 83 views
0

我正在制作一个界面网站来更新乐队网站上的音乐会列表。 列表存储为一个XML文件具有这样的结构:使用PHP脚本更新XML文件

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

回答

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(); 
?> 

代码是未经测试,但它是一个总体思路

+0

感谢您的回复... $ tag-> setAttribute(“[attributeName]”,“[attributeValue]”);这个代码本身并没有工作...请建议它... – viswanathan

+0

你是如何使用它?首先查看文档以确保正确使用它http://www.php.net/manual/en/domelement.setattribute.php –

+0

@viswanathan:您遇到的问题是由于保存( ) 方法 。您需要使用需要更新的XML文件的名称将参数传递给此方法。 – Saiesh

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查询获取任何特定记录。与DOMDOcument相比,SimpleXML同样轻得多,而且更容易使用这种类型的东西 - 特别是因为您不使用DOMDocument的功能。

+1

SimpleXML的+1 ..检查这些资源,以更好地了解这里做了什么.. PHP的SimpleXML类 - http://devzone.zend.com/article/688 和Xpath - http:// www。 w3schools.com/XPath/xpath_syntax.asp – Anurag