php xml节点 修改,增加,编辑,删除代码

 更新时间:2016年11月25日 16:54  点击:1305
本教程是利用了php domdocument函数来对xml节点 修改,增加,编辑,删除代码下面每个操作节点都是英文说明,如果你能写程序我想这些英文都能看得懂的。

//-------------------------------------------------------------------------------------

 代码如下 复制代码

function loadfile($file){
  $newfile=new domdocument();
  $newfile->validateonparse=true;
  $newfile->load($file);
 
  return $newfile;
}
function add($file, $parentname, $children){ //增加xml节点
  $xml=loadfile($file);
 
  $id=uniqid('m' . rand(1,5), true);
  $parentnode=$xml->createelement($parentname);
  $parentnode->setattribute('mid', $id);
  foreach($children as $child => $value){
    $childnode=$xml->createelement($child, $value);
    $parentnode->appendchild($childnode);
  }
  $xml->documentelement->appendchild($parentnode);
  $xml->save($file);
  return $id;
}
function delete($file, $id){//删除xml 节点
  $xml=loadfile($file);
  $ids=explode(",", $id);
  foreach ($ids as $oldnodeid){
    $oldnode=$xml->getelementbyid($oldnodeid);
    $parentnode=$oldnode->parentnode;
    $parentnode->removechild($oldnode);
  }
  $xml->save($file);
}
function edit($file, $id, $child, $value){//编辑xml 节点
  $xml=loadfile($file);
 
  $parentnode=$xml->getelementbyid($id);
  $childnode=$parentnode->childnodes->item($child);
  $textnode=$childnode->childnodes->item(0);
  $textnode->nodevalue=$value;
 
  $xml->save($file);
}
function move($file, $moveid, $refid=null){ //移动xml节点
  $xml=loadfile($file);
 
  $movenode=$xml->getelementbyid($moveid);
  $parentnode=$movenode->parentnode;
  if ($refid!=null) {
    $refnode=$xml->getelementbyid($refid);
    if(!$parentnode->issamenode($refnode->parentnode)) return false;
  }
  else $refnode=null;
  $movenode=$parentnode->removechild($movenode);
  $parentnode->insertbefore($movenode,$refnode);
 
  $xml->save($file);
}

本文章提供二种生成xml的方法,第一种是直接查询数据库查询在php 页面输出xml格式的数据,第二种方法是利用了php DOMDocument组件生成xml实例原理有一点不同。
 代码如下 复制代码

$sql = "查询数据库文件";
$query = mysql教程_query($sql);
echo "<?xml version='1.0' encoding='utf-8' ?>";
echo "<photos>";
while(@$result = mysql_fetch_array($query)){

echo "<photo desc='$result[文件名字段]' url='_pics/$result[文件名字段]' />";

}
echo "</photos>";
//--------------------------------------------------------
$this->_delimage('/_pics');

function _delimage($path){
 if(is_dir($path)){
   $dp=dir($path);
   while($file=$dp->read())
    if($file!='.'&&$file!='..'){
     $this->_delimage($path.'/'.$file);
    }
    $dp->close();
  }
echo "<photo desc='$path' url='$path' />";
}

//利用domdocument

 
   
$doc=new domdocument("1.0","gb2312");  #声明文档类型  
$doc->formatoutput=true;               #设置可以输出操作  
 
#声明根节点,最好一个xml文件有个跟节点  
$root=$doc->createelement("root");    #创建节点对象实体   
$root=$doc->appendchild($root);      #把节点添加进来  
    
   # for($i=1;$i<100;$i++){  //循环生成节点,如果数据库调用出来就改这里  
    
   $info=$doc->createelement("info");  #创建节点对象实体  
   $info=$root->appendchild($info);    #把节点添加到root节点的子节点  
 
        $namevalue=$doc->createattribute("value");  #创建节点属性对象实体   
        $namevalue=$info->appendchild($namevalue);  #把属性添加到节点info中  
         
        $name=$doc->createelement("name");    #创建节点对象实体         
        $name=$info->appendchild($name);  
         
        $sex=$doc->createelement("sex");  
        $sex=$info->appendchild($sex);  
         
        $name->appendchild($doc->createtextnode("adevy001"));  #createtextnode创建内容的子节点,然后把内容添加到节点中来  
        $namevalue->appendchild($doc->createtextnode("adevy"));  
        $sex->appendchild($doc->createtextnode(iconv("gb2312","utf-8","男"))); #注意要转码对于中文,因为xml默认为utf-8格式  
  # }     
   $doc->save("info.xml"); #保存路径eg d:/www.111cn.net  
   echo "生成成功。。。。";  
 
 
  #code by coder_apex 2007-6-15  
#自动生成一个如下的xml文件  
#  
#       <?xml version="1.0" encoding="gb2312" ? >  
#         - <root>  
#             - <info value="www.111cn.net">  
#                <name>adevy001</name>  
#                <sex>男</sex>  
#               </info>  
#           </root>

?>

本款教程实例是一款利用了 DOMDocument 的getElementById查询到指定的经删除节点,然后用removeChildm删除指定xml节点bi
 代码如下 复制代码
  */
  public function deletecomment($id) {
    $xml = new domdocument();
    $xml->validateonparse=true;
    $xml->loadxml($this->getcontents(true));
    $message = $xml->getelementbyid($id);
    $parentnode = $message->parentnode;
    $parentnode->removechild($message);
    $this->putcontents($xml->savexml());
  }
 
  /*
  xml 文档
 
  <?xml version="1.0" encoding="utf-8"?>
<!doctype messages [
<!element messages (message)*>
<!element message (name , website? , comment , date , user_ip? , user_agent? , spam)>
<!attlist message mid id #required>
<!element name (#pcdata)>
<!element website (#pcdata)>
<!element comment (#pcdata)>
<!element date (#pcdata)>
<!element spam (#pcdata)>
<!element user_ip (#pcdata)>
<!element user_agent (#pcdata)>
]>
<messages>
</messages>


  */

 代码如下 复制代码
    function: addcomment
   
    adds a comment.
   
    parameters:
      $data - associative array of data, must contain 'name', 'website', 'comment', 'date', 'user_ip', 'user_agent', and 'spam'.
     
    returns:
      id of the new comment.
  
   <?xml version="1.0" encoding="utf-8"?>
<!doctype messages [
<!element messages (message)*>
<!element message (name , website? , comment , date , user_ip? , user_agent? , spam)>
]>
<messages>
</messages>
  */
  public function addcomment($data) {
    $xml = new simplexmlelement($this->getcontents(true));
    $message = $xml->addchild('message');
    $id = $this->generateid();
    $message->addattribute('mid', $id);
    foreach ($data as $key => $value) {
      $message->addchild($key, htmlspecialchars($value, ent_quotes));
    }
    $this->putcontents($xml->asxml());
   
    return $id;
  }
 代码如下 复制代码

$xml = < < < xml 
<?xml version = "1.0" ?>  
  <misc_command version="1.5">  
  <command_name>provision </command_name>  
  <command_data_block>  
  <action_id>1 </action_id>  
  <service_id>01112233 </service_id>  
  <mid>00148888888888 </mid>  
  <mobile_id>www.111cn.net </mobile_id>  
  <access_mode>1 </access_mode>  
  <access_mode>2 </access_mode>  
  <access_mode>3 </access_mode>  
  </command_data_block>  
  </misc_command>  
xml; 
$x = simplexml_load_string($xml); 
//$x = simplexml_load_string(file_get_content(url)); 
print_r($x); 

out: 
simplexmlelement object 

  [@attributes] => array 
  ( 
  [version] => 1.5 
  ) 

  [command_name] => provision 
  [command_data_block] => simplexmlelement object 
  ( 
  [action_id] => 1 
  [service_id] => 01112233 
  [mid] => 00148888888888 
  [mobile_id] => 13999998888 
  [access_mode] => array 
  ( 
  [0] => 1 
  [1] => 2 
  [2] => 3 
  ) 

  ) 

<?

<?xml version="1.0′ encoding="utf-8′?>   
<class>   
    <student>   
       <id>3</id>   
       <name>张三</name>   
    </student>   
    <student>   
       <id>5</id>   
       <name>李四</name>   
    </student>   
</class>  

$url="http://mb.111cn.net/ws.php?q=content";  
    $dom = new domdocument();   
    $dom->load($url);  
    //print"<pre>";  
    //print( $dom->savexml());  
    $dictarray = $dom->getelementsbytagname("dict");  
    foreach( $dictarray as $dict ) {  
          $key = $dict->getelementsbytagname("key");  
          $key=$key->item(0)->nodevalue;  
          $key= iconv("utf-8","gb2312",$key);     //注意要转码对于中文,因为xml默认为utf-8格式  
          echo ("***输出>key>的内容:****:".$key);  
 
          $lang = $dict->getelementsbytagname("lang");  
          $lang = utf8_decode($lang->item(0)->nodevalue);  
          echo "<br>";  
          echo ("***输出>lang>的内容:****:".$lang);  
     }  


方法三

$fp=fsockopen("xxx.xxx.com", 80, $errno, $errstr, 30);
 if($fp){
  $out = "get /abc.xml?key=value http/1.1 ";  
     $out .= "host: xxx.xxx.com ";  
     $out.= 'user_agent: xml-rpc client ';
     $out.='content-type: text/xml ';
     $out .= "connection: close ";    
    
      fwrite($fp,$out);
  while(!@feof($fp)){
         $result.=@fgets($fp,1024);
       }
       fclose($fp);  
 }
 echo $result;

[!--infotagslink--]

相关文章

  • php读取zip文件(删除文件,提取文件,增加文件)实例

    下面小编来给大家演示几个php操作zip文件的实例,我们可以读取zip包中指定文件与删除zip包中指定文件,下面来给大这介绍一下。 从zip压缩文件中提取文件 代...2016-11-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • 怎么用PS为人像脸部增加打散颗粒特效

    用PS将人像脸部打造成打散颗粒的效果,成品出来后很美,过程略复杂,需要耐心和细心。现在跟着步骤来做吧! 1、首先在PS里面打开这张图。 2、选择快速选择工具的增加...2016-12-21
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • 删除条目时弹出的确认对话框

    复制代码 代码如下: <td> <a href="/member/life/edit_ppt/<?php echo $v->id;?>" class="btn">编辑</a> <a href="javascript:;" onclick="if(confirm('您确定删除这条记录?')){location.href='/member/life/d...2014-06-07
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • 通过两种方式增加从库――不停止mysql服务

    一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快...2015-11-08
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • php跨网站请求伪造与防止伪造方法

    伪造跨站请求介绍伪造跨站请求比较难以防范,而且危害巨大,攻击者可以通过这种方式恶作剧,发spam信息,删除数据等等。...2013-10-01
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • PHP常用的小程序代码段

    本文实例讲述了PHP常用的小程序代码段。分享给大家供大家参考,具体如下:1.计算两个时间的相差几天$startdate=strtotime("2009-12-09");$enddate=strtotime("2009-12-05");上面的php时间日期函数strtotime已经把字符串...2015-11-24
  • php怎么用拼音 简单的php中文转拼音的实现代码

    小编分享了一段简单的php中文转拼音的实现代码,代码简单易懂,适合初学php的同学参考学习。 代码如下 复制代码 <?phpfunction Pinyin($_String...2017-07-06
  • Centos中彻底删除Mysql(rpm、yum安装的情况)

    我用的centos6,mysql让我整出了各种问题,我想重装一个全新的mysql,yum remove mysql-server mysql之后再install并不能得到一个干净的mysql,原来的/etc/my.cnf依然没变,datadir里面的数据已没有任何变化,手动删除/etc/my.cn...2015-03-15