zoukankan      html  css  js  c++  java
  • XML详解二XML的解析与创建

    XML用来传输和存储数据,如何解析获取到的XML文本呢?

    一.解析XML

    创建demo.xml文件:

    <?xml version="1.0" encoding="UTF-8"?> 
    <bookstore>
        <book book_id="1">
          <title>php</title> 
          <author>php入门到放弃</author> 
        </book>
        <book book_id="2">
          <title>java</title> 
          <author>java入门到放弃</author> 
        </book>
        <book book_id="3">
          <title>C</title> 
          <author>C入门到放弃</author> 
        </book>
    </bookstore>

    使用PHP解析demo.xml中的内容,以获取到php这个文本节点为例:

    <?php
        /*思路:1.先载入xml文档 2.获取节点列表对象 3.获取子节点对象 4.获取子节点列表对象 5.获取文本对象 如果层级比较深就是循环2-4步,先拿列表对象,再拿子节点对象...*/
        
        $dom = new DOMDocument('1.0','UTF-8');
        //print_r($dom); //DOMDocument Object
    
        $dom->load('demo.xml'); //载入要解析的xml文档
    
        $titleList = $dom->getElementsByTagName('title'); ////DOMNodeList Object ( [length] => 3 ) 获取节点列表对象
    
        $title = $titleList->item(0); //DOMElement Object 获取子节点对象
    
        $title = $title->childNodes; //DOMNodeList Object ( [length] => 1 )获取子节点列表对象
    
        $title = $title->item(0); //DOMText Object 获取到文本对象
    
        $text = $title->wholeText; //获取到文本内容
    
        echo $text; //php
        echo '<br>';
    
        //也可以直接写成连贯操作:  
        $text = $dom->getElementsByTagName('title')->item(0)->childNodes->item(0)->wholeText;
    
        echo $text; //php
        echo '<br>';
    
        //第二种方法:
        $text = $dom->getElementsByTagName('title')->item(0)->nodeValue; //获取到文本内容
        echo $text; //php

    除了解析之外,还可以对xml节点进行删除和替换操作:

        $dom = new DOMDocument('1.0','UTF-8');
    
        $dom->load('demo.xml'); //载入要解析的xml文档
        /**
         *xml删除节点
         * */
        $php = $dom->getElementsByTagName('book')->item(0); //获取文本节点
    
        $php->parentNode->removeChild($php); //获取文本节点的父节点,然后站在父节点的立场删除子文本节点
    
        /**
         * xml替换节点
         * */
        $java = $dom->getElementsByTagName('title')->item(0); //获取要替换的文本节点
    
        $newnode = $dom->createTextNode('python'); //创建新的文本节点
    
        $java->replaceChild($newnode,$java->firstChild); //用新节点替换旧文本节点内容
    
        header("content-type:text/xml");
        echo $dom->saveXML(); //直接输出xml文本     

    二.创建XML

    使用PHP创建一个如下的XML文件:

    <?xml version="1.0" encoding="UTF-8"?> 
    <bookstore>
     <book book_id="1">
         <title>php</title>
         <author><![CDATA[PHP是世界上最好的编程语言.emmm...]]></author>
     </book>
    </bookstore>

    PHP代码:

    <?php
        $dom = new DOMDocument('1.0','UTF-8');
    
        $text =  $dom->createTextNode('php'); //创建文本节点
    
        $title = $dom->createElement('title'); //创建普通节点
    
        $title->appendChild($text); //将文本节点作为子节点添加到普通节点内
    
        $cdata = $dom->createCDATASection('PHP是世界上最好的编程语言.emmm...'); //创建CDATA节点
    
        $author = $dom->createElement('author'); //创建普通节点
    
        $author->appendChild($cdata); //将CDATA节点作为子节点添加到普通节点内
    
        $book = $dom->createElement('book'); //创建普通节点
    
        //将上面创建的两个普通节点作为子节点添加到普通节点内
        $book->appendChild($title);
        $book->appendChild($author);
    
        $book_id = $dom->createAttribute('book_id'); //创建属性名
        $book_id->value = '1'; //创建属性值
    
        $book->appendChild($book_id); //将属性加到普通节点内
    
        $bookstore = $dom->createElement('bookstore'); //创建普通节点
        $bookstore->appendChild($book); //将普通节点作为子节点添加到普通节点内
    
        $dom->appendChild($bookstore); //将普通节点添加到文档内
    
        // header("content-type:text/xml");
        // echo $dom->saveXML(); //直接输出xml文本
        
        echo $dom->save('demo.xml'); //生成xml文件
    

    在浏览器输出如下图:

  • 相关阅读:
    hive函数总结
    python判断文件和目录是否存在
    python中的参数
    写hive db的两种方法
    python中argparse模块的使用
    python数据持久存储:pickle模块的使用
    python读文件
    mysql 将时间戳直接转换成日期时间
    shell日期的应用
    [转]SQL UNION 和 UNION ALL 操作符
  • 原文地址:https://www.cnblogs.com/52lnamp/p/9817468.html
Copyright © 2011-2022 走看看