2009-07-28 2 views
13

Я хочу изменить свой 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 будет изменять с помощью атрибута типа.

означает, что в первый раз поисковая строка == "отели" тогда данные, относящиеся к отелям, будут храниться в XML-файле, как указано выше.

Теперь, когда снова осуществляется поиск отелей, он удалит элементы, имеющие дочерний элемент со стоимостью гостиниц.

и искать различные запросы, например. школы в это время данные, связанные со школами, добавляются в файл xml. с данными отелей.

теперь снова поиск школ, то он удалит элемент, связанный со школами.

Заранее спасибо.

+0

Является источником «оригинальные, полные» данные также XML на основе? Или это «только» база данных SQL, и вы хотите отформатировать результат как xml? – VolkerK

+1

Вам нужно что-нибудь сделать [SimpleXML] [1] не может сделать? [1]: http://php.net/manual/en/book.simplexml.php – markus

+0

i m создание xml для google map – Avinash

ответ

23

Вы можете использовать DOMDocument из 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 Code.

<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(); 
}); 
+0

да, кажется, хорошо, позвольте мне chk в моем коде – Avinash

+0

как удалить весь узел маркера из моего xml-файла? – Avinash

+0

Вы добавляете все $ marker изнутри foreach в массив $ nodesToDelete. –

4

Document Object Model (DOM) - это ответ.

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

, но как я мог бы прокручивать xml-файл elments ..? – Avinash

+3

Прочитав документацию: http://de.php.net/manual/en/class.domelement.php – Bombe

+21

Цель StackOverflow, на мой взгляд, - помочь пользователям, предоставив им примеры, которые могут помочь им в разрешении их вопрос. Не подразумевать, что они не читали или не искали в документации. –

Смежные вопросы