黑马程序员技术交流社区

标题: 【广州PHP】PHP创建与解析XML [打印本页]

作者: gz_xudada    时间: 2018-7-13 16:46
标题: 【广州PHP】PHP创建与解析XML
本帖最后由 gz_xudada 于 2018-7-13 16:53 编辑

PHP创建与解析XML
一.使用SimpleXML操控XML
要处理XML文件,有两种传统的处理思路:SAX和DOM.SAX基于事件触发机制,对XML文件进行一次扫描,完成要进行的处理;DOM则将整个XML文件构造为一颗DOM树,通过对DOM树的遍历完成处理.这两种方法各有优缺点,SAX的处理思路相对抽象,DOM的处理过程相对烦琐,都不很适合新手的入门.
PHP5退出一套新的XML处理函数,即SimpleXML.名如其实,SimpleXML本身小巧精干,只提供了少量的几个方法的函数,单用它处理起XML文件功能却非常强大,操作也非常的简单

1.创建XML文件  
[PHP] 纯文本查看 复制代码
<?php
  $_xml=<<<xml
  <?xml version="1.0" encoding='utf-8'?>
  <root>
      <version>1.0</version>
      <info>xml解析测试</info>
      <user>
          <author sex="男">张三</author>
          <age>23</age>
      </user>
      <user>
          <author sex="女">李四</author>
          <age>24</age>
      </user>
      <user>
          <author sex="男">王五</author>
          <age>25</age>
      </user>
  </root>
  xml;
  //创建对象解析xml字符串
  $_sxe = new SimpleXMLElement($_xml);
  //在当前目录下,生成XML文件
  $_sxe->asXML('./test.xml');
  ?>

效果图:
2.载入XML文件
[PHP] 纯文本查看 复制代码
  <?php
      $_sxe = simplexml_load_file("./test.xml");
      var_dump($_sxe);//输出相关信息
      print_r($_sxe);//输出主要信息
      Reflection::export(new ReflectionClass($_sxe));//用反射查看详情
  ?>
效果图:
3.解析XML文件
[PHP] 纯文本查看 复制代码
 <?php
      header("Content-type:text/xml");
      $_sxe = simplexml_load_file("test.xml");//载入XML文件
      echo $_sxe->asXML();//打印整个XML
  ?>

效果图:
4.读出XML数据  
[PHP] 纯文本查看 复制代码
<?php
      $_sxe = simplexml_load_file("test.xml");//载入XML文件
      //读取一级节点的值,比如version标签
      echo $_sxe->version;
      echo '<hr/>';
      //如果有多个,可以设置它的数字下标
      echo $_sxe->version[0];
      echo '<hr/>';
      //如果想要全部打印出来,可以用遍历
      foreach($_sxe->version as $_version){
          echo '['.$_version.']';
      }
      //访问二级节点的author
      echo $_sxe->user[0]->author;
      echo '<hr/>';
  ​
      //获取所有二级节点的name值
      foreach($_sxe->user as $_user){
          echo '[' . $_user->author .']';
      }
      echo '<hr/>';
      
      //获取二级节点的标签的属性
      echo $_sxe->user[0]->author->attributes();
  ?>

效果图:
5.使用XPath来获取节点
[PHP] 纯文本查看 复制代码
 <?php
      $_sxe = simplexml_load_file("test.xml");//载入XML文件
      //使用Xpath获取节点信息
      $_verson = $_sxe->xpath("/root/version");
      echo $_version[1];
      //遍历version
      foreach($_version as $_v){
          echo '[' . $_v .']';
      }
      //访问二级节点
      $_user = $_sxe->xpath('/root/user');
      echo $_user[2]->name;
      //遍历二级节点
      foreach($_user as $_u){
          echo '['. $u->name .']';
      }
      //访问属性
      echo $_user[1]->author->attributes();
  ?>

效果图:

二.使用DOMDocument操作XML
很多情况下,手工生成标记要求从上到下生成文档,必须保证标签都是完整的,开始和结束标签.尽管借助于一些PHP函数或类可以有所改善,不过PHP还提供了一组更有帮助的内置对象和函数.文档对象模型(Document Object Model,DOM)提供了一个树桩结构,能很容易创建和处理标签.
1.DOMDocument生成XML
[PHP] 纯文本查看 复制代码
  <?php
      //声明xml
      $_doc = new DOMDocument('1.0','utf-8');
      //排版格式
      $_doc->formatOutput = true;
      //创建一个主标签
      $_root = $_doc->createElement('root');   
      //创建一个一级标签version
      $_version = $_doc->createElement('version');
      //给version标签里赋值
      $_versionTextNode = $_doc->createTextNode('1.0');
      //将值放入version标签里
      $_version->appendChild($_versionTextNode);
      //将一级标签version放入root里
      $_root->appendChild($_version);
      //将主标签写入xml
      $_doc->appendChild($_root);
      //生成xml
      $_doc->save('aaa.xml');
  ?>
效果图:
2.DOMDocument解析XML
[PHP] 纯文本查看 复制代码
  <?php
      //创建一个DOMDocument()
      $_doc = new DOMDocument();
  ​
      //载入xml
      $_doc->load('test.xml');
  ​
      //取version标签
      $_version =$_doc->getElementsByTagName('version');;
      echo $_version->item(2)->nodeValue;
      //遍历version标签
      foreach($_version as $v){
          echo $v->nodeValue;
      }
  ?>
效果图





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2