2009-12-31 81 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