• 使用SimpleXML解析xml文件数据


    最近工作要求从一个XML文档中批量读取APK应用数据,自然想到用SimpleXML。经过一段时间摸索,终于成功解析,现在将思路以及代码做下记录:

    xml文件格式大致如下:

    <?xml version="1.0" encoding="UTF-8"?>
    
    <!DOCTYPE html>
    
    <html xmlns="http//www.w3.org/1999/xhtml" xml:lang="en">
    
      <body>
    
        <appinfos>
    
          <appinfo>
    
            <name>app1</name>
            <icon>http://www.baidu.com/pic/dxdfdf.png</icon>
    
            <downurl>http://www.baidu.com/down/sdkdfk.apk</downurl>
    
            <screenshot1>http://www.baidu.com/pic/sdfuererieir.png</screenshot1>
    
          </appinfo>
    
            <name>app2</name>
    
            <icon>http://www.baidu.com/pic/dxdfdf.png</icon>
    
            <downurl>http://www.baidu.com/down/sdkdfk.apk</downurl>
    
            <screenshot1>http://www.baidu.com/pic/sdfuererieir.png</screenshot1>
    
          </appinfo>
    
            <name>app3</name>
    
            <icon>http://www.baidu.com/pic/dxdfdf.png</icon>
    
            <downurl>http://www.baidu.com/down/sdkdfk.apk</downurl>
    
            <screenshot1>http://www.baidu.com/pic/sdfuererieir.png</screenshot1>
    
          </appinfo>
    
        </appinfos>
    
      </body>
    
    </html>

    我得需求是要从这个文件中得到所有的apk信息(apk1,apk2,apk3....)。php代码是这样的:

    <?php
    header("content-type:text/html;charset=utf-8");
    error_reporting(E_ALL);
    $xmlObj = simplexml_load_file("new.xml");
    foreach($xmlObj->body->appInfos->appInfo as $key => $val){
        foreach($val as $ck => $cv){
            $arr[$ck] = (string)$cv;  //这个地方的string做了强制转换,否则系统会仍为$cv是一个simpleXML对象,这样是得不到字符串结果的
        }
        var_dump($arr);
        $str = json_encode($arr);
        file_put_contents("data.txt",$str."
    ",FILE_APPEND);
        $arr = array();
    }

    观察这行代码:$xmlObj->body->appInfos->appInfo可以发现,SimpleXML的操作类似于一个嵌套对象,一级一级往下找,找到appInfo发现是多个,后面的代码遍历一下就得到结果了。

    注意xml的标准比较严格,实体&,<,>,',"需要分别转义成&amp;,$lt;,$gt;,$apos;,$quot;

    最末级的数据比如:<icon>http://www.baidu.com/pic/006.png</icon>,在</icon>前如果有换行读取时也是会报错的。还有,<br />一定要这样写才行。

    坚持!
  • 相关阅读:
    聊聊Unity2018的LWRP和混合光照
    不能直接获取?聊聊如何在Shader Graph中获取深度图
    还原堆栈信息,分析地形系统使用ASTC格式的纹理导致Crash的问题
    巧妙设置Texture Type,将ShadowMask内存占用变成之前的1/4
    开发自定义ScriptableRenderPipeline,将DrawCall降低180倍
    Signed Distance Field Shadow in Unity
    Daily Pathtracer!安利下不错的Pathtracer学习资料
    聊聊LightProbe原理实现以及对LightProbe数据的修改
    Scala学习笔记(六):本地函数、头等函数、占位符和部分应用函数
    Scala学习笔记(五):内建控制循环
  • 原文地址:https://www.cnblogs.com/doubilaile/p/4574376.html
Copyright © 2020-2023  润新知