2009-07-28 104 views
13

我想根據以下條件在PHP中修改我的xml文件。如何使用PHP修改xml文件

我的XML結構是這樣的:

<?xml version="1.0" encoding="ISO-8859-1" ?> 

<markers> 
    <marker> 
     <type></type> 
     <title></title> 
     <address></address> 
     <latitude></latitude> 
     <longitude></longitude> 
    <marker> 
    <marker> 
     <type></type> 
     <title></title> 
     <address></address> 
     <latitude></latitude> 
     <longitude></longitude> 
    <marker> 
</markers> 

現在每次當XML要修改,用type屬性的時間。

表示在第一次搜索字符串==「hotels」時,與酒店相關的數據將以上述格式存儲在xml文件中。

現在,當再次搜索酒店已完成時,它將刪除具有子元素的酒店的元素。

並且搜索針對例如不同的查詢。學校在那時完成與學校有關的數據被附加到xml文件。與酒店的數據。

現在再次搜索學校已完成,那麼它將刪除有關學校的元素。

在此先感謝。

+0

是「原稿,完整」的數據源也基於XML的?或者它「僅」是一個SQL數據庫,並且您想將結果格式化爲xml? – VolkerK 2009-07-28 12:00:02

+1

你需要做什麼[SimpleXML] [1]不能做什麼? [1]:http://php.net/manual/en/book.simplexml.php – markus 2009-07-28 12:18:50

+0

我爲谷歌地圖創建xml地圖 – Avinash 2009-07-28 12:21:09

回答

23

您可以從PHP使用的DOMDocument

你加載你的文件並且比文件的childNode循環低。

<?php 
$dom=new DOMDocument(); 
$dom->load("file.xml"); 

$root=$dom->documentElement; // This can differ (I am not sure, it can be only documentElement or documentElement->firstChild or only firstChild) 

$nodesToDelete=array(); 

$markers=$root->getElementsByTagName('marker'); 

// Loop trough childNodes 
foreach ($markers as $marker) { 
    $type=$marker->getElementsByTagName('type')->item(0)->textContent; 
    $title=$marker->getElementsByTagName('title')->item(0)->textContent; 
    $address=$marker->getElementsByTagName('address')->item(0)->textContent; 
    $latitude=$marker->getElementsByTagName('latitude')->item(0)->textContent; 
    $longitude=$marker->getElementsByTagName('longitude')->item(0)->textContent; 

    // Your filters here 

    // To remove the marker you just add it to a list of nodes to delete 
    $nodesToDelete[]=$marker; 
} 

// You delete the nodes 
foreach ($nodesToDelete as $node) $node->parentNode->removeChild($node); 

echo $dom->saveXML(); 
?> 

您可以保存你的輸出這樣的XML

$dom->saveXML(); // This will return the XML as a string 
$dom->save('file.xml'); // This saves the XML to a file 

做到這一點的JavaScript解析您應該使用jQuery(小,但功能強大的庫)。

您可以直接從Google Code Repository包含該庫。

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 

庫是跨瀏覽器和非常小的。它應該在很多情況下被緩存,因爲有些網站使用它從谷歌代碼

$(yourXMLStringOrDocument).find("marker").each(function() { 
    var marker=$(this); 

    var type=marker.find('type').text(); 
    var title=marker.find('title').text(); 
    var address=marker.find('address').text(); 
    var latitude=marker.find('latitude').text(); 
    var longitude=marker.find('longitude').text(); 
}); 
4

文檔對象模型(DOM)就是答案。

<? 
$dom=new DomDocument(); 
$dom->Load("file.xml"); 
$root=$dom->documentElement; 
... 
$dom->Save("file.xml"); 
?>