Как изменить xml-файл с помощью PHP
Я хочу изменить свой xml-файл на PHP на основе следующих критериев.
Моя структура 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.
Означает, что при первом поиске строка =="отели", тогда данные, относящиеся к отелям, будут сохранены в xml-файле в указанном выше формате.
Теперь, когда снова будет выполнен поиск отелей, он удалит элементы, у которых есть дочерний элемент со значением отели.
И искать другой запрос, например, для школ, выполняется в то время, когда данные, относящиеся к школам, добавляются в xml-файл. с данными отелей.
Теперь снова выполняется поиск школ, после чего будет удален элемент, связанный со школами.
Заранее благодарю.
2 answers
Вы можете использовать DOMDocument из PHP.
Вы загружаете свой файл и затем выполняете цикл через Дочерние узлы документа.
<?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
$(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();
});
Объектная модель документа (DOM) - это ответ.
<?
$dom=new DomDocument();
$dom->Load("file.xml");
$root=$dom->documentElement;
...
$dom->Save("file.xml");
?>