我想根据以下标准在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>
现在每次使用type属性修改xml时。
表示在第一次搜索字符串==“酒店”时,与酒店相关的数据将以上述格式存储在xml文件中。
现在再次搜索酒店时,它将删除具有值酒店的子元素的元素。
并搜索不同的查询,例如学校在那时完成与学校相关的数据被附加到xml文件。与酒店的数据。
现在再次搜索学校,然后它将删除与学校相关的元素。
提前致谢。
答案 0 :(得分:26)
您可以使用 PHP 中的 DOMDocument 。
您加载文件而不是循环播放文档的 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 Code Repository中包含该库。
<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
该库是跨浏览器的,非常小。它应该在很多情况下缓存,因为有些网站会使用Google代码
$(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();
});
答案 1 :(得分:6)
文档对象模型(DOM)就是答案。
<?
$dom=new DomDocument();
$dom->Load("file.xml");
$root=$dom->documentElement;
...
$dom->Save("file.xml");
?>
答案 2 :(得分:0)
<?php
$xml = new DOMDocument('1.0','UTF-8');
$xml->preserveWhiteSpace = FALSE;
$xml->load("markers.xml");
$mar = $xml->getElementsByTagName("marker");
foreach($mar as $row){
$type = $row->getElementsByTagName('type')->item(0);
$title = $row->getElementsByTagName('title')->item(0);
$address = $row->getElementsByTagName('address')->item(0);
$latitude = $row->getElementsByTagName('latitude')->item(0);
$longitude = $row->getElementsByTagName('longitude')->item(0);
$row->replaceChild($type, $type);
$row->replaceChild($title, $title);
$row->replaceChild($address, $address);
$row->replaceChild($latitude, $latitude);
$row->replaceChild($longitude, $longitude);
?>
<form id="q_form" method="post" action="">
<div class="form-group form-group-lg">
<div class="table-responsive">
<table id="choices_table" class="table table-bordered" >
<tr>
<td>
<div class="form-group">
<input type="type"
name ="title"
value="<?php echo $type->nodeValue ?>"
/>
</div>
</td>
<td>
<div class="form-group">
<input type="text"
name ="title"
value="<?php echo $title->nodeValue ?>"
/>
</div>
</td>
<td>
<div class="form-group">
<input type="text"
name ="address"
value="<?php echo $address->nodeValue ?>"
/>
</div>
</td>
<td>
<div class="form-group">
<input type="latitude"
name ="latitude"
value="<?php echo $latitude->nodeValue ?>"
/>
</div>
</td>
<td>
<div class="form-group">
<input type="latitude"
name ="longitude"
value="<?php echo $longitude->nodeValue ?>"
/>
</div>
</td>
</table>
</div>
</div>
<input type="submit" name="submit" value=" EDIT " class="btn btn-primary" />
</form>
<?php
if (isset($_POST['submit']))
{
$type->nodeValue = $_POST['type'];
$text->nodeValue = $_POST['text'];
$address->nodeValue = $_POST['address'];
$latitude->nodeValue = $_POST['latitude'];
$longitude->nodeValue = $_POST['longitude'];
$xml->save("markers.xml");
}
}
?>