我想根据以下条件在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文件时,进行针对学校的不同查询。与酒店的数据。
现在再次搜索学校已完成,然后将删除与学校相关的元素。
提前致谢。
您可以使用 DOM文档 从 PHP 。
您加载文件,然后遍历文档的 childNodes 。
<?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代码存储库中添加该库。
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
该库是跨浏览器的,并且非常小。 在许多情况下,应将其缓存,因为某些网站从Google Code中使用它
$(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(); });