• php解析xml


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

  • 相关阅读:
    springmvc整合mybatis框架源码 bootstrap
    观察者模式与.Net Framework中的委托与事件
    C#类型基础——学习笔记一
    知识图谱简介及常见应用场景
    Go语言实现bitmap算法
    互联网公司不同发展阶段需要什么样的技术负责人
    Go语言中使用切片(slice)实现一个Vector容器
    Go语言中defer语句使用小结
    使用interface与类型诊断机制判断一个类型是否实现了某个方法
    互联网产品发掘种子用户和意见领袖的方法
  • 原文地址:https://www.cnblogs.com/meteoric_cry/p/2007628.html
Copyright © 2020-2023  润新知