2009-07-28 12 views
13

Desidero modificare il mio file xml in PHP in base ai seguenti criteri.Come modificare il file xml utilizzando PHP

mia struttura XML simile a questa:

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

Ora, ogni volta in cui XML andando a modificare, con l'attributo type.

significa, al primo tentativo di ricerca stringa == "hotel" quindi i dati relativi agli hotel verranno archiviati in file xml come sopra formato.

Ora, quando si esegue nuovamente la ricerca di hotel, verranno rimossi gli elementi che contengono elementi figlio con hotel di valore.

e cercare query diverse per es. le scuole vengono fatte in quel momento i dati relativi alle scuole vengono aggiunti al file xml. con i dati degli hotel.

ora di nuovo ricerca per le scuole è fatto quindi rimuoverà l'elemento relativo alle scuole.

Grazie in anticipo.

+0

è la fonte di dati "originale, completa" anche basato su XML? O è "solo" un database SQL e vuoi formattare il risultato come xml? – VolkerK

+1

Hai bisogno di fare qualcosa [SimpleXML] [1] non può fare? [1]: http://php.net/manual/en/book.simplexml.php – markus

+0

sto creando xml per google map – Avinash

risposta

23

È possibile utilizzare il DOMDocument da PHP.

Si carica il file e si esegue il ciclo tramite i codici figlio del documento.

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

È possibile salvare il XML output come questo

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

Per fare questo l'analisi in JavaScript si dovrebbe usare jQuery (una piccola, ma potente libreria).

Puoi includere la raccolta direttamente dal Google Code Repository.

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

La biblioteca è cross-browser e molto piccola. Dovrebbe essere memorizzato nella cache in molti casi, in quanto alcuni siti lo usano da 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

sì sembra buono, lasciami chk nel mio codice – Avinash

+0

come faccio a rimuovere tutto il nodo marker dal mio file xml? – Avinash

+0

Si aggiungono tutti gli indicatori $ dall'interno del foreach all'array $ nodesToDelete. –

4

Document Object Model (DOM) è la risposta.

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

ma come posso eseguire il looping degli xml file elments ..? – Avinash

+3

Leggendo la documentazione: http://de.php.net/manual/en/class.domelement.php – Bombe

+21

Lo scopo di StackOverflow, secondo me, è aiutare gli utenti dando loro esempi che possano aiutarli a risolvere i loro problemi. problema. Non implicare che non hanno letto o cercato nella documentazione. –

Problemi correlati