PHP kullanarak xml dosyasını değiştirmek için nasıl

2 Cevap php

Ben aşağıdaki kriterlere dayalı PHP benim xml dosyasını değiştirmek istediğiniz.

benim xml yapısı şöyle:

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

Şimdi xml türü niteliği ile, değiştirmek için gidiyor her zaman.

İlk kez arama dizesi, anlamı == "otel" daha sonra otel ile ilgili veri biçimi yukarıdaki gibi xml dosyasında saklanır.

Şimdi tekrar otelleri araştırın yapılır o değeri oteller ile çocuk eleman elementler kaldıracaktır.

ve örneğin, farklı sorgu için arama okullar okullara ilişkin veriler xml dosyasına eklenir o zaman yapılır. otel verileri ile.

şimdi tekrar okullar için arama yapılır o okullara ilişkin öğe kaldırmak olacaktır.

Şimdiden teşekkürler.

2 Cevap

Sen PHP den DOMDocument kullanabilirsiniz.

Eğer dosya yüklemek ve döngü daha childNodes belgenin yalak.

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

Bu gibi XML çıktı kaydedebilirsiniz

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

Bu ayrıştırma yapmak için JavaScript Eğer jQuery (bir küçük, ama güçlü kütüphane) kullanmalısınız.

Google Code Repository doğrudan kütüphane içerebilir.

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

The library is cross-browser and very small. It should be cached in many cases, because some sites use it from 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();
});

Document Object Model (DOM) cevaptır.

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