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脚本便达到目的了。

目录
相关文章
|
17天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
22天前
|
PHP 项目管理 开发者
深入解析PHP的命名空间和自动加载机制
【4月更文挑战第4天】 在PHP的编程世界中,命名空间和自动加载机制是构建大型应用程序时不可或缺的工具。本文将深入探讨这两个概念,揭示它们如何简化代码结构、避免类名冲突以及提高代码维护性。通过对PHP命名空间的由来、作用域和使用方法的细致剖析,以及对自动加载机制工作原理和应用实践的全面讲解,读者将获得有效管理复杂项目中依赖关系的能力。
|
2天前
|
PHP
PHP中的命名空间深入解析
【4月更文挑战第24天】在PHP的编程世界中,命名空间是一个重要的概念,它解决了在大型项目中可能出现的类名或函数名冲突的问题。本文将深入探讨PHP中的命名空间,包括其基本概念、使用方法以及其在代码组织和重用方面的优势。
|
4天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
5天前
|
关系型数据库 MySQL PHP
深入解析PHP中的命名空间
【4月更文挑战第20天】在PHP的编程世界中,命名空间是一个强大的工具,用于解决代码中的名称冲突问题。通过本文的深度解析,我们将探索PHP命名空间的概念、实现原理以及它们如何优雅地帮助我们管理代码库。从基础的定义到高级用法,本篇文章旨在提供一份全面的指南,帮助开发者有效利用命名空间来优化他们的PHP项目结构和可维护性。
|
7天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
15 1
|
XML PHP 数据格式
|
7月前
|
关系型数据库 MySQL PHP
PHP 原生操作 Mysql
PHP 原生操作 Mysql
81 0
|
7月前
|
关系型数据库 MySQL 数据库连接
PHP 原生连接 Mysql
PHP 原生连接 Mysql
107 0

推荐镜像

更多