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 相关文章推荐
再次研究下cache_lite
Feb 14 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
Mar 03 PHP
php &amp;&amp; 逻辑与运算符使用说明
Mar 04 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
Smarty变量调节器失效的解决办法
Aug 20 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
分享自定义的几个PHP功能函数
Apr 15 PHP
php+jQuery递归调用POST循环请求示例
Oct 14 PHP
php使用PDO从数据库表中读取数据的实现方法(必看)
Jun 02 PHP
Thinkphp 5.0实现微信企业付款到零钱
Sep 30 PHP
PHP 出现 http500 错误的解决方法
Mar 09 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中替换换行符的几种方法小结
2012/10/15 PHP
PHP flock 文件锁详细介绍
2012/12/29 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
php多文件上传下载示例分享
2014/02/20 PHP
解决laravel 出现ajax请求419(unknown status)的问题
2019/09/03 PHP
Auntion-TableSort国人写的一个javascript表格排序的东西
2007/11/12 Javascript
JavaScript高级程序设计 阅读笔记(十四) js继承机制的实现
2012/08/14 Javascript
JS往数组中添加项性能分析
2015/02/25 Javascript
js实现文本框只允许输入数字并限制数字大小的方法
2015/08/19 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
JS实现回到页面顶部动画效果的简单实例
2016/05/24 Javascript
JS中如何比较两个Json对象是否相等实例代码
2016/07/13 Javascript
关于js函数解释(包括内嵌,对象等)
2016/11/20 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
详解angularjs 学习之 scope作用域
2018/01/15 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
2019/06/26 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
[38:30]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第一场2
2014/05/24 DOTA
Scrapy的简单使用教程
2017/10/24 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Pycharm保存不能自动同步到远程服务器的解决方法
2019/06/27 Python
python实现函数极小值
2019/07/10 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python判断正负数方式
2020/06/03 Python
python操作redis数据库的三种方法
2020/09/10 Python
改变 Python 中线程执行顺序的方法
2020/09/24 Python
美国马匹用品和骑马配件购物网站:Horse.com
2018/01/08 全球购物
西雅图的买手店:Totokaelo
2019/10/19 全球购物
几道PHP的面试题
2012/05/19 面试题
专科应届生求职信
2013/11/24 职场文书
三八妇女节趣味活动方案
2014/08/23 职场文书
个人批评与自我批评发言稿
2014/09/28 职场文书
世界文化遗产导游词
2015/02/13 职场文书
普希金诗歌赏析(6首)
2019/08/22 职场文书
完美处理python与anaconda环境变量的冲突问题
2021/04/07 Python