php实现解析xml并生成sql语句的方法


Posted in PHP onFebruary 03, 2018

本文实例讲述了php实现解析xml并生成sql语句的方法。分享给大家供大家参考,具体如下:

php解析xml有很多种办法,文档中有,搜索一下就一大把的。

今天遇到一个需求:将某个xml中的节点属性提取出来,然后更新数据库某一表中的字段。

思路:

解析XML,获取所有的节点属性 ?> 循环节点集合,获取对应的属性 ?> 拼接sql字符串存入一数组 ?> 将数组转为字符串保存于某一文件中

这里使用了xpath,在写代码的过程中遇到两个问题:

1、xml的史路径属性为D:\xx\…时load不了文件,改为”/”(linux下的分隔符)就可以了

2、获取一个节点的属性,使用::attributes,编辑器就不停的红色提示,找到半天文档,最后用->getAttribute()就行了(猜的,因为太奇怪了,它支持->previousSibling和->nodeValue),按照,文档上的DOMElement::getAttribute直接就报错了..

php实现解析xml并生成sql语句的方法

下面是示例代码:

<title>xml 转换为 sql</title>
<meta http-equiv='content-type' content='text/html; charset=utf-8' />
<style type="text/css">
  .tip_info {margin-bottom:10px;}
  .tip_info span {color:#f00;}
</style>
<?php
$xml = "D:/res/dressConfig.xml";
$doc = new DOMDocument();
$doc->load($xml);
$xpath = new DOMXPath($doc);
$query = "//i";
$entries = $xpath->query($query);
$len = $entries->length;
echo "<div class='tip_info'>总共找到:<span>".$len."</span>个节点</div>";
$arr = array();
$idx = 0;
while ($idx < $len) {
  $nodeItem = $entries->item($idx);
  $id = $nodeItem->getAttribute("i");
  $name = $nodeItem->getAttribute("n");
  $inf = $nodeItem->getAttribute("inf");
//  echo "<div>".$id.'--'.$name.'--'.$inf."</div>";
  $idx++;
  array_push($arr, "update dress_item t SET t.s_name='".$name."',t.s_intro='".$inf."' WHERE t.n_doid=".$id.";");
}
$dir = "d:/sql/";
if (!is_dir($dir)) {
  mkdir($dir);
}
file_put_contents("d:/sql/dress_item.sql", implode("\n\r", $arr));
echo "生成完毕!";
?>

因为数据是从数据库表中生成出来的,所以找到的节点数即为表中的记录总数。生成后可以大概看一下内容是否正确,然后再执行该sql脚本便达到目的了。

PHP 相关文章推荐
PHP的FTP学习(二)
Oct 09 PHP
在PHP中检查PHP文件是否有语法错误的方法
Dec 23 PHP
PHP数组传递是值传递而非引用传递概念纠正
Jan 31 PHP
探讨如何在php168_cms中提取验证码
Jun 08 PHP
Symfony控制层深入详解
Mar 17 PHP
Yii针对添加行的增删改查操作示例
Oct 18 PHP
mac os快速切换多个PHP版本的方法
Mar 07 PHP
php文件包含目录配置open_basedir的使用与性能详解
Apr 03 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
Jun 07 PHP
php常用的工具开发整理
Sep 26 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 PHP
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
Mar 14 PHP
PHP删除数组中指定下标的元素方法
Feb 03 #PHP
php学习笔记之mb_strstr的基本使用
Feb 03 #PHP
php通过pecl方式安装扩展的实例讲解
Feb 02 #PHP
PHP实现对图片的反色处理功能【测试可用】
Feb 01 #PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 #PHP
基于php双引号中访问数组元素报错的解决方法
Feb 01 #PHP
PHP运用foreach神奇的转换数组(实例讲解)
Feb 01 #PHP
You might like
中国收音机工业发展史
2021/03/02 无线电
如何删除多级目录
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
PHP无刷新上传文件实现代码
2011/09/19 PHP
php递归实现无限分类的方法
2015/07/28 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
2008/12/19 Javascript
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
jQuery实现contains方法不区分大小写的方法
2015/02/13 Javascript
JQuery显示隐藏DIV的方法及代码实例
2015/04/16 Javascript
详解mpvue开发微信小程序基础知识
2019/09/23 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
Openlayers测量距离与面积的实现方法
2020/09/25 Javascript
js实现鼠标切换图片(无定时器)
2021/01/27 Javascript
浅谈对yield的初步理解
2017/05/29 Python
python与C互相调用的方法详解
2017/07/14 Python
python ansible服务及剧本编写
2017/12/29 Python
深入解析HTML5 Canvas控制图形矩阵变换的方法
2016/03/24 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
基于HTML5+tracking.js实现刷脸支付功能
2020/04/16 HTML / CSS
.NET程序员的几道面试题
2012/06/01 面试题
Java程序开发中如何应用线程
2016/03/03 面试题
商场中秋节广播稿
2014/01/17 职场文书
教学实习自我评价
2014/01/28 职场文书
优秀中学生事迹材料
2014/01/31 职场文书
事务机电主管工作职责
2014/02/25 职场文书
一位农村小子的自荐信
2014/04/07 职场文书
2014年教师节讲话稿5篇
2014/09/10 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
公司租车协议书
2015/01/29 职场文书
大足石刻导游词
2015/02/02 职场文书
烈士陵园扫墓感想
2015/08/07 职场文书
丧事酒宴答谢词
2015/09/30 职场文书
Python图像处理之图像拼接
2021/04/28 Python