So ändern Sie XML-Dateien mit PHP

Ich möchte meine XML-Datei in PHP basierend auf den folgenden Kriterien ändern.

meine XML-Struktur sieht wie folgt aus:

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

Jetzt jedes Mal, wenn XML ändern wird, mit dem type-Attribut.

bedeutet, bei der ersten Suchzeichenfolge == "Hotels" werden dann Daten im Zusammenhang mit Hotels in xml-Datei als obigeS Format gespeichert.

Wenn nun wieder nach Hotels gesucht wird, werden die Elemente entfernt, die ein untergeordnetes Element mit Werthotels haben.

und die Suche nach verschiedenen Abfragen für z.B. Schulen erfolgt zu diesem Zeitpunkt, wenn Daten im Zusammenhang mit den Schulen an die XML-Datei angehängt werden. mit den Daten der Hotels.

jetzt wieder Suche nach Schulen getan ist, dann wird es das Element im Zusammenhang mit Schulen entfernen.

Vielen Dank im Voraus.

Antwort auf "So ändern Sie XML-Dateien mit PHP " 2 von antworten

Document Object Model (DOM) ist die Antwort.

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

Sie können das DOMDocument von PHP verwenden.

Sie laden Ihre Datei und als Schleife durch die childNodes des Dokuments.

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

Sie können Ihre Ausgabe-XML wie diese

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

speichern Um diese Analyse in JavaScript zu tun, sollten Sie jQuery (a small, but powerful library). (eine kleine, aber leistungsstarke Bibliothek) verwenden.

Sie können die Bibliothek direkt aus dem Google Code Repository einschließen.

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

Die Bibliothek ist browserübergreifend und sehr klein. Es sollte in vielen Fällen zwischengespeichert werden, da einige Websites es von 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();
});
verwenden