欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

XML详解二XML的解析与创建

程序员文章站 2023-08-11 21:25:58
XML用来传输和存储数据,如何解析获取到的XML文本呢? 一.解析XML 创建demo.xml文件: 使用PHP解析demo.xml中的内容,以获取到php这个文本节点为例: 除了解析之外,还可以对xml节点进行删除和替换操作: 二.创建XML 使用PHP创建一个如下的XML文件: PHP代码: 在 ......

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文件

在浏览器输出如下图:

XML详解二XML的解析与创建