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 相关文章推荐
URL Rewrite的设置方法
Jan 02 PHP
木翼下载系统中说明的PHP安全配置方法
Jun 16 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
Jun 21 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
解决PHP里大量数据循环时内存耗尽的方法
Oct 10 PHP
PHP定时执行任务的3种方法详解
Dec 21 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
laravel migrate初学常见错误的解决方法
Oct 11 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
Oct 10 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
浅谈Laravel中的三种中间件的作用
Oct 13 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
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
微信公众平台开发-微信服务器IP接口实例(含源码)
2017/03/05 PHP
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
Jquery 自定义动画概述及示例
2013/03/29 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
2013/09/15 Javascript
js onclick事件传参讲解
2013/11/06 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
JavaScript ParseFloat()方法
2015/12/18 Javascript
jquery实现具有收缩功能的垂直导航菜单
2016/02/16 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
vue中实现先请求数据再渲染dom分享
2018/03/17 Javascript
JS中数组与对象的遍历方法实例小结
2018/08/14 Javascript
在vue中使用express-mock搭建mock服务的方法
2018/11/07 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
matplotlib简介,安装和简单实例代码
2017/12/26 Python
python基础学习之如何对元组各个元素进行命名详解
2018/07/12 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
Python拆分大型CSV文件代码实例
2019/10/07 Python
python web框架Flask实现图形验证码及验证码的动态刷新实例
2019/10/14 Python
布隆过滤器的概述及Python实现方法
2019/12/08 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
python Timer 类使用介绍
2020/12/28 Python
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
详解CSS3+JS完美实现放大镜模式
2020/12/03 HTML / CSS
咖啡馆创业计划书
2014/01/26 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
践行三严三实心得体会
2014/10/13 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python