如何使用PHP修改xml文件

Avi*_*ash 14 php xml

我想根据以下条件在PHP中修改我的xml文件.

我的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>
Run Code Online (Sandbox Code Playgroud)

现在每当xml要修改时,都带有type属性.

意思是,在第一次搜索字符串=="酒店"时,与酒店相关的数据将以上述格式存储在xml文件中.

现在,当再次搜索酒店时,它将删除具有有价值酒店的子元素的元素.

并且当时完成了对学校的不同查询的搜索,并将与学校相关的数据附加到xml文件中.与酒店的数据.

现在再次搜索学校,然后它将删除与学校相关的元素.

提前致谢.

Cri*_*oma 27

您可以使用DOM文档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();
?>
Run Code Online (Sandbox Code Playgroud)

您可以像这样保存输出XML

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

要在JavaScript中进行解析,您应该使用jQuery(一个小而强大的库).

您可以直接从Google Code Repository中包含该库.

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

该库是跨浏览器的,非常小.它应该在很多情况下缓存,因为有些网站会使用Google代码

$(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();
});
Run Code Online (Sandbox Code Playgroud)


ada*_*ost 6

文档对象模型(DOM)就是答案.

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

  • 在我看来,StackOverflow的目的是通过给用户提供可以帮助他们解决问题的示例来帮助用户.并不意味着他们没有在文档中阅读或搜索过. (28认同)
  • 通过阅读文档:http://de.php.net/manual/en/class.domelement.php (3认同)