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

PHP操作XML

程序员文章站 2022-05-27 14:49:16
...

PHP简单读取XML

PHP操作XML

DOM

DOM:Document object model,文档对象模型

节点的分类

  1. 元素节点
  2. 属性节点
  3. 值节点
  4. 注释节点
  5. 根节点(document才是根节点)

生成XML文档

PHP操作XML

读取XMl文档

PHP操作XML

递归遍历XML

nodeType的值

节点

1

元素节点

2

属性节点

9

根节点

3

值节点

值节点的名称是"#text"

根节点的名称是"#document"

<?php
//递归XML文档
echo '<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>';
function getChilds($node){
    echo "<ul>";
    if($node->nodeType==3){//如果是值节点
        echo "<li>".$node->nodeValue."</li>"; 
    }
    else{//不是值节点
        echo "<li>".$node->nodeName."</li>";//取出元素节点的名称
       if($node->attributes->length>0) {//节点的属性的个数大于0,表示此节点有属性
           
           foreach ($node->attributes as $attr){
               echo '<li>'.$attr->value.'</li>';  //取出节点的值 
               
           }
       }
        foreach ($node->childNodes as $child) {//遍历循环子元素
            getChilds($child);//递归点
        }
    }
    echo "</ul>";
}
$doc=new DOMDocument();
$doc->preserveWhiteSpace=false;//不保护空格,就是导入XML的时候,去掉空白字符
$doc->load("books.xml");
$root=$doc->documentElement;//获得最顶层元素
getChilds($root);

综合例题:对图书的操作

1、管理界面books_admin.php,

通过childnodes属性来获取所有子节点,然后再取子节点的值

PHP操作XML

通过firstchild和lastchild访问子节点

PHP操作XML

2、添加界面books_add.php

3、修改界面books_modify.php

PHP操作XML

4、删除

PHP操作XML

PHP操作XML

Xpath

通过DOM结构定位节点,在数据量很大时候速度下降的很厉害,解决方法是Xpath.

XPath的作用:用于快速定位节点。

PHP操作XML

PHP操作XML

Position()是节点的位置,节点的位置是从1开始的。

PHP操作XML

simpleXML

PHP5以上提供了一个simpleXML对象来操作XML.把XML的节点转换成对象和数组去操作

PHP操作XML

 

PHP操作XML

PHP操作XML

unset只销毁当前变量(栈区地址),不会销毁对应的对象(堆中地址)。

使用php函数处理xml

simplexml_load_string() 函数转换形式良好的 XML 字符串为 SimpleXMLElement 对象。

<!DOCTYPE html>

<html>

<body>


<?php

$note=<<<XML

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

XML;


$xml=simplexml_load_string($note);

print_r($xml);

?>


</body>

</html>


结果:

SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don't forget me this weekend! )

simplexml_load_file() 函数把 XML 文档载入对象中。

simplexml_load_file(file,class,options,ns,is_prefix)

参数 描述

file 必需。规定要使用的 XML 文档。

class 可选。规定新对象的 class。

options 可选。规定附加的 Libxml 参数。

ns 可选。

is_prefix 可选。

返回值

返回类 SimpleXMLElement 的一个对象,该对象的属性包含 XML 文档中的数据。如果失败,则返回 false。

xml文件

<?xml version="1.0" encoding="ISO-8859-1"?>

<note>

<to>George</to>

<from>John</from>

<heading>Reminder</heading>

<body>Don't forget the meeting!</body>

</note>


php文件

<?php

if (file_exists('test.xml'))

{

$xml = simplexml_load_file('test.xml');

var_dump($xml);

}


else

{

exit('Error.');

}

?>


结果:

object(SimpleXMLElement)#1 (4)

{

["to"]=> string(4) "George"

["from"]=> string(4) "John"

["heading"]=> string(8) "Reminder"

["body"]=> string(29) "Don't forget the meeting!"

}