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基础学习笔记
Mar 18 PHP
php设计模式 State (状态模式)
Jun 26 PHP
PHP Undefined index报错的修复方法
Jul 17 PHP
php代码书写习惯优化小结
Jun 20 PHP
PHP动态生成javascript文件的2个例子
Apr 11 PHP
PHP小教程之实现链表
Jun 09 PHP
php中多维数组按指定value排序的实现代码
Aug 19 PHP
PHP判断浏览器、判断语言代码分享
Mar 05 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
初识PHP中的Swoole
Apr 05 PHP
PHP后台备份MySQL数据库的源码实例
Mar 18 PHP
PHP中的自动加载操作实现方法详解
Aug 06 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
Cannot modify header information错误解决方法
2008/10/08 PHP
怎样去阅读一份php源代码
2009/08/21 PHP
来自phpguru得Php Cache类源码
2010/04/15 PHP
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
php ajax confirm 删除实例详解
2019/03/06 PHP
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
理解Javascript闭包
2013/11/01 Javascript
带左右箭头图片轮播的JS代码
2013/12/18 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
JS实现密码框的显示密码和隐藏密码功能示例
2016/12/26 Javascript
JavaScript队列函数和异步执行详解
2017/06/19 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
JavaScript中七种流行的开源机器学习框架
2018/10/11 Javascript
vue elementui form表单验证的实现
2018/11/11 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
[01:11:32]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中的测试模块unittest和doctest的使用教程
2015/04/14 Python
Pyqt实现无边框窗口拖动以及窗口大小改变
2018/04/19 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
python进行参数传递的方法
2020/05/12 Python
pycharm 2018 激活码及破解补丁激活方式
2020/09/21 Python
什么是Python变量作用域
2020/06/03 Python
收集的22款给力的HTML5和CSS3帮助工具
2012/09/14 HTML / CSS
利用HTML5画出一个坦克的形状具体实现代码
2013/06/20 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
医院护士求职自荐信格式
2013/09/21 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
4s店活动策划方案
2014/08/25 职场文书
2014年语文教研组工作总结
2014/12/06 职场文书
2014年企业员工工作总结
2014/12/09 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
Java基于字符界面的简易收银台
2021/06/26 Java/Android
MySQL普通表如何转换成分区表
2022/05/30 MySQL