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简单的伪原创程序,配合商城采集用的
Oct 12 PHP
php数字转汉字代码(算法)
Oct 08 PHP
php eval函数用法 PHP中eval()函数小技巧
Oct 31 PHP
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
Jun 05 PHP
php过滤XSS攻击的函数
Nov 12 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
Apr 24 PHP
[原创]PHP简单开启curl的方法(测试可行)
Jan 11 PHP
PHPExcel笔记, mpdf导出
May 03 PHP
PHP+Ajax验证码验证用户登录
Jul 20 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 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
一个PHP二维数组排序的函数分享
2014/01/17 PHP
PHP验证终端类型是否为手机的简单实例
2017/02/07 PHP
PHP进程通信基础之信号量与共享内存通信
2017/02/19 PHP
浅谈laravel-admin的sortable和orderby使用问题
2019/10/03 PHP
对象无length属性时IE6/IE7中无法将其转换成伪数组(ArrayLike)
2011/07/31 Javascript
Jquery选择器中使用变量实现动态选择例子
2014/07/25 Javascript
ajaxFileUpload.js插件支持多文件上传的方法
2014/09/02 Javascript
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
javascript记住用户名和登录密码(两种方式)
2015/08/04 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
使用Promise链式调用解决多个异步回调的问题
2017/01/15 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
Vue 自定义动态组件实例详解
2018/03/28 Javascript
详解如何用typescript开发koa2的二三事
2018/11/13 Javascript
spring+angular实现导出excel的实现代码
2019/02/27 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
2019/04/25 Javascript
D3.js(v3)+react 实现带坐标与比例尺的柱形图 (V3版本)
2019/05/09 Javascript
jQuery提示框插件SweetAlert用法分析
2019/08/05 jQuery
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
图文详解WinPE下安装Python
2016/05/17 Python
python select.select模块通信全过程解析
2017/09/20 Python
Django开发的简易留言板案例详解
2018/12/04 Python
对python:循环定义多个变量的实例详解
2019/01/20 Python
详解pandas删除缺失数据(pd.dropna()方法)
2019/06/25 Python
python3.7 使用pymssql往sqlserver插入数据的方法
2019/07/08 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
简述python Scrapy框架
2020/08/17 Python
关于python scrapy中添加cookie踩坑记录
2020/11/17 Python
html5视频常用API接口的实战示例
2020/03/20 HTML / CSS
美国学校校服,儿童和婴儿服装:Cookie’s Kids
2016/10/14 全球购物
教你怎样写好自我评价
2013/10/05 职场文书
财务管理专业推荐信
2013/11/19 职场文书
宿舍违规检讨书
2014/01/12 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
护士求职自荐信范文
2015/03/04 职场文书
辩论赛开场白大全(主持人+辩手)
2015/05/29 职场文书