2009-07-28 16 views
13

Chcę zmodyfikować mój plik XML w PHP na podstawie następujących kryteriów.Jak zmodyfikować plik XML za pomocą PHP

moja struktura XML wyglądać tak:

<?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> 

Teraz za każdym razem, gdy xml zamiar zmodyfikować, z atrybutem type.

oznacza, przy pierwszym wyszukiwaniu ciąg == "hotele", dane dotyczące hoteli będą przechowywane w pliku xml w powyższym formacie.

Po ponownym wyszukaniu hoteli zostanie usunięty element, który ma element podrzędny z wartościowymi hotelami.

i wyszukaj inne zapytanie dla np. szkoły są w tym czasie dane związane ze szkołami są dołączane do pliku xml. z danymi hoteli.

po raz kolejny wyszukiwanie szkół zostanie zakończone, a następnie usunie element związany ze szkołami.

Z góry dziękuję.

+0

Czy źródło również xml „oryginalne, kompletne” Dane oparte? Czy jest to "tylko" baza danych SQL i chcesz sformatować wynik jako xml? – VolkerK

+1

Czy musisz zrobić coś [SimpleXML] [1] nie może zrobić? [1]: http://php.net/manual/en/book.simplexml.php – markus

+0

i m tworzenie xml dla mapy google – Avinash

Odpowiedz

23

Można użyć domDocument z PHP.

Załadujesz plik, a następnie zapętlisz plik childNodes dokumentu.

<?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(); 
?> 

można zapisać dane wyjściowe XML jak ten

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

Aby to zrobić parsowanie w JavaScript należy użyć jQuery (małe, ale potężne biblioteki).

Możesz dołączyć bibliotekę bezpośrednio z repozytorium kodów Google.

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

Biblioteka jest przeglądarka i bardzo mała. Powinien on być buforowane w wielu przypadkach, ponieważ niektóre witryny używać go z 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

tak wydaje się dobrze, pozwól mi chk w moim kodu – Avinash

+0

Jak usunąć wszystkie znacznik węzła z mojego pliku xml? – Avinash

+0

Dodajesz wszystkie znaczniki $ z wewnątrz forea do tablicy $ nodesToDelete. –

4

Model obiektu dokumentu (DOM) jest odpowiedzią.

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

, ale w jaki sposób można przechodzić przez pliki xml ..? – Avinash

+3

Czytając dokumentację: http://de.php.net/manual/en/class.domelement.php – Bombe

+21

Celem StackOverflow jest, moim zdaniem, pomoc użytkownikom poprzez podanie przykładów, które mogą im pomóc w rozwiązaniu ich problemów. kwestia. Nie oznacza to, że nie przeczytali ani nie przeszukali w dokumentacji. –

Powiązane problemy