php解析xml

简介: php解析xml有很多种办法,文档中有,搜索一下就一大把的。 今天遇到一个需求:将某个xml中的节点属性提取出来,然后更新数据库某一表中的字段。 思路: 解析XML,获取所有的节点属性 –> 循环节点集合,获取对应的属性 –> 拼接sql字符串存入一数组 –> 将数组转为字符串保存于某一文件中...
+关注继续查看

php解析xml有很多种办法,文档中有,搜索一下就一大把的。

今天遇到一个需求:将某个xml中的节点属性提取出来,然后更新数据库某一表中的字段。

思路:

解析XML,获取所有的节点属性 –> 循环节点集合,获取对应的属性 –> 拼接sql字符串存入一数组 –> 将数组转为字符串保存于某一文件中

 

这里使用了xpath,在写代码的过程中遇到两个问题:

1、xml的史路径属性为D:\xx\…时load不了文件,改为”/”(linux下的分隔符)就可以了

2、获取一个节点的属性,使用::attributes,编辑器就不停的红色提示,找到半天文档,最后用->getAttribute()就行了(猜的,因为太奇怪了,它支持->previousSibling和->nodeValue),按照,文档上的DOMElement::getAttribute直接就报错了..

image

 

下面是示例代码:

   1: <title>xml 转换为 sql</title>
   2: <meta http-equiv='content-type' content='text/html; charset=utf-8' />
   3: <style type="text/css">
   4:     .tip_info {margin-bottom:10px;}
   5:     .tip_info span {color:#f00;}
   6: </style>
   7: <?php
   8: $xml = "D:/res/dressConfig.xml";
   9: $doc = new DOMDocument();
  10: $doc->load($xml);
  11: $xpath = new DOMXPath($doc);
  12: $query = "//i";
  13: $entries = $xpath->query($query);
  14: $len = $entries->length;
  15:  
  16: echo "<div class='tip_info'>总共找到:<span>".$len."</span>个节点</div>";
  17:  
  18: $arr = array();
  19:  
  20: $idx = 0;
  21: while ($idx < $len) {
  22:     $nodeItem = $entries->item($idx);
  23:     $id = $nodeItem->getAttribute("i");
  24:     $name = $nodeItem->getAttribute("n");
  25:     $inf = $nodeItem->getAttribute("inf");
  26:     
  27: //    echo "<div>".$id.'--'.$name.'--'.$inf."</div>";
  28:     $idx++;
  29:     
  30:     array_push($arr, "update dress_item t SET t.s_name='".$name."',t.s_intro='".$inf."' WHERE t.n_doid=".$id.";");
  31: }
  32:  
  33: $dir = "d:/sql/";
  34:  
  35: if (!is_dir($dir)) {
  36:     mkdir($dir);
  37: }
  38:  
  39: file_put_contents("d:/sql/dress_item.sql", implode("\n\r", $arr));
  40: echo "生成完毕!";
  41: ?>

 

因为数据是从数据库表中生成出来的,所以找到的节点数即为表中的记录总数。生成后可以大概看一下内容是否正确,然后再执行该sql脚本便达到目的了。

目录
相关文章
QGS
|
7月前
|
应用服务中间件 PHP nginx
(openEuler21.03-Centos7-x86)yum安装php+nginx—配置nginx解析php
记(openEuler21.03-Centos7-x86)yum安装php+nginx—配置nginx解析php
QGS
439 0
(openEuler21.03-Centos7-x86)yum安装php+nginx—配置nginx解析php
QGS
|
8月前
|
应用服务中间件 Shell 网络安全
Centos7-x86 yum安装配置nginx解析php—shell脚本
记Centos7-x86 yum安装配置nginx解析php—shell脚本
QGS
128 0
Centos7-x86 yum安装配置nginx解析php—shell脚本
|
9月前
|
PHP
PHP解析Markdown库,parsedown扩展自定义语法
在开发系统过程中,有些信息编写储存是使用Markdown通用语法,但由于各个平台的会新增一些独特规范,一般的解析库都是只包含了标准语法,对于自定义语法是不支持解析的(如vuepress文档系统中的::: tip 提示语块) 我们从vuepress迁移文档系统到自己实现的文档系统时,特定标签无法解析,需要扩展解析库的功能,来完成自定义语法。 PHP常见的Markdown解析库是parsedown。这个库非常的轻量,只有一个文件,无需依赖其他扩展。
148 0
PHP解析Markdown库,parsedown扩展自定义语法
|
9月前
|
XML JSON API
PHP中simplexml_load_string解析xml的正确方式
对接我php接口的是安卓客户端,json字符串中在一个元素的时候是对象类型,多个元素的时候是数组类型,安卓客户端解析就失败了。 所以引申出这篇文章,详细测试、记录一下php中解析xml方式和细节
138 0
|
9月前
|
XML JSON PHP
PHP解析json、xml错误
php内置函数json_decode() 可以解析json字符串 但是有的时候看起来正确的json,解析却一直返回null。 你知道吗,json是可能解析失败的,此时PHP不会产生提示。 我们需要手动通过json_last_error()函数获取
106 0
|
10月前
|
PHP
PHP内存泄漏问题解析
PHP内存泄漏问题解析
53 0
PHP内存泄漏问题解析
|
10月前
|
机器学习/深度学习 PHP 索引
[Leetcode 之 PHP 解析 (42. Trapping Rain Water)
[Leetcode 之 PHP 解析 (42. Trapping Rain Water)
53 0
[Leetcode 之 PHP 解析 (42. Trapping Rain Water)
|
10月前
|
PHP
Leetcode 之 PHP 解析 (260. Single Number III)
Leetcode 之 PHP 解析 (260. Single Number III)
58 0
Leetcode 之 PHP 解析 (260. Single Number III)
|
10月前
|
PHP
PHP内存泄漏问题解析
PHP内存泄漏问题解析
38 0
PHP内存泄漏问题解析
PHP:simple_html_dom解析html字符串
PHP:simple_html_dom解析html字符串