• xml之phpdom操作


    php xml编程
    XML解析技术介绍
      1.php与DOM

      2.PHP与XPath

      3.SimpleXML

    DOM(document object model)文档对象模型
      把一个文件看做一个对象模型,通过对象的方式来操作各个节点
    元素节点  属性节点  文本节点

    要求:对xml文件进行CRUD操作 create read update delete 增删改查

    @查找节点元素
      1.//创建DOMDocument对象
        $docxml=new DOMDocument();
      2.加载指定的xml文件,在内存形成DOM树
        $docxml->load('class.xml');
      3.查询目标节点进行操作
        $node=$docxml->getElementsByTagName('student'); 所有DOMNodeList 节点列表
    返回所有节点为class的节点类型(DOMNodelList) 节点对象
    var_dump($node);

    DOMNodelList节点具有length属性   有几个节点
      $node->length;
      4.遍历取出需要的学生节点
      item()方法

    for($i=0;$i<$node->length;$i++){
        $stu=$node->item($i);
        getNodeVal($stu,'name');
    }

      5.取出需要的元素

    取出第几个节点元素
    $stu=$node->item(0);
    取出名字
    $stuname=$stu->getElementsByTagName('name');
    echo $stuname->item(0)->nodeValue;


    函数简化取值操作
    function getNodeVal(&$MyNode,$tagName){
      return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue;
    }

    $docxml=new DOMDocument();
    $docxml->load('class.xml');
    function getNodeVal(&$MyNode,$tagName){
    return $MyNode->getElementsByTagName($tagName)->item(0)->nodeValue;
    }
    echo getNodeVal($docxml,'age');
    

     @ 创建元素节点

    <?php
    //1.创建xmldoc对象
    $docxml=new DOMDocument();

    //2.加载xml文件
    $docxml->load('class.xml');
    //3.取挂在根节点
    $root=$docxml->getElementsByTagName('class')->item(0); 如果不加item(0) 则为 DOMNodeList节点类型 加上item(0) 为DOMElement类型对象

    //4.创建节点
    $stu_node=$docxml->createElement('student');

    $stu_node_name=$docxml->createElement('name');
    $stu_node_name->nodeValue='liming'; 类型 DOMElement extends DOMNode
    //挂在节点构建DOM树
    $stu_node->appendChild($stu_node_name);

    $stu_node_age=$docxml->createElement('age');
    $stu_node_age->nodeValue='25';
    $stu_node->appendChild($stu_node_age);

    //5.挂在到根节点下
    $root->appendChild($stu_node);

    添加属性
    $stu_node->setAttribute("sex","boy");
    删除属性
    $stu_node->removeAttribute("sex");

    此时都在内存中运行没有保存到xml中,所以需要保存到xml中

    6.$xmldoc->save("class.xml"); 把树回写到xml中
    ?>
    如果save到源文件 相当于对文件添加更新,如果save是新的文件名,则保存到新文件里(包括旧文件里的内容)

    @删除节点元素
      找到要删除的节点 用父节点删除此节点
    1. $stu=$docxml->getELementsByTagName("stu");
    $stu1=$stu->item(2);
    2.$stu1->parentNode->removeChild($stu1);
    3.更新xml文件
    $docxml->save("class.xml");

    @ 更新节点
    把第一个学生年龄+10
    1.找到学生
    $stu=$docxml->getELementsByTagName("stu");
    $stu1=$stu->item(0);
    2.$stu_age=$stu1->getElementsByTagName("age")->item(0)
    因为不知道有几个年龄元素 所以需要item取出
    3.$stu_age->nodeValue+=10;
    4.更新xml文件

    Xpath技术使用价值

    dom操作需要一层一层的查找
      dom操作可以实现跨层查找,但不能保持层次关系,所以使用xpath技术,实现跨层次并且 层次关系清楚

    XPath(XML Path Language)是一种标示节点位置的语言,可以用来描述XML元素的位置,如同硬盘资料夹的档案路径
      XPath可以指出XML元素在xml文件中的位置,即树状结构的节点位置
    核心思想:
      通过xpath迅速定位你想查找的节点

    PHP程序在载入xml文件建立DOMDocument对象后,就可以建立DOMXPath对象

    //1.创建xmldoc对象
      $docxml=new DOMDocument();

    //2.加载xml文件
      $docxml->load('class.xml');
    //3.创建xpath对象
      $xpath=new DOMXPath($docxml);
    //4.使用query()方法找出XPath位置路径表达式的节点对象
      $items=$xpath->query("/bb/cc");
    返回DOMNodeList对象集合,无则返回空

  • 相关阅读:
    Delphi TMessage[3] TApplicationEvents.OnMessage
    Delphi TCursor[2] TScreen.Cursor
    Delphi TCursor[1] 鼠标光标图像
    Delphi TMessage[6] Perform、SendMessage、PostMessage 发送并响应消息
    Delphi TCursor[3] TControl.Cursor自定义光标
    删除mysql服务的具体方法
    uniApp 打包H5工程 超详细(打包实现跨域nignx配置)
    mysql 远程访问
    IDEA:端口号被占用解决办法
    hbuild 快捷键
  • 原文地址:https://www.cnblogs.com/jiechn/p/4660187.html
Copyright © 2020-2023  润新知