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 include加载文件两种方式效率比较
Aug 08 PHP
php checkbox 取值详细说明
Aug 19 PHP
兼容性最强的PHP生成缩略图的函数代码(修改版)
Jan 18 PHP
PHP文件注释标记及规范小结
Apr 01 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
PHP数据过滤的方法
Oct 30 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
php文件上传及下载附带显示文件及目录功能
Apr 27 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 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
社区(php&amp;&amp;mysql)一
2006/10/09 PHP
有关PHP中MVC的开发经验分享
2012/05/17 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
zf框架db类的分页示例分享
2014/03/14 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
2014/06/30 PHP
php读取本地json文件的实例
2018/03/07 PHP
javascript学习笔记(十八) 获得页面中的元素代码
2012/06/20 Javascript
JavaScript中的console.time()函数详细介绍
2014/12/29 Javascript
Javascript实现计算个人所得税
2015/05/10 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
node.js入门实例helloworld详解
2015/12/23 Javascript
vue.js实现条件渲染的实例代码
2017/06/22 Javascript
AngularJs每天学习之总体介绍
2017/08/07 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
layui之select的option叠加问题的解决方法
2018/03/08 Javascript
基于AngularJs select绑定数字类型的问题
2018/10/08 Javascript
详解vue-router的Import异步加载模块问题的解决方案
2020/05/13 Javascript
[02:51]2014DOTA2国际邀请赛 IG战队官方纪录片
2014/07/21 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
简单了解Python读取大文件代码实例
2019/12/18 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
比利时的在线灯具店:Lampen24.be
2019/07/01 全球购物
网络教育自我鉴定
2013/11/01 职场文书
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
学雷锋志愿者活动总结
2014/06/27 职场文书
高中语文教学反思范文
2016/02/16 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
redis实现排行榜功能
2021/05/24 Redis
Golang 遍历二叉树
2022/04/19 Golang