PHP操作XML

PHP简单读取XML

DOM

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

节点的分类

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

生成XML文档

读取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属性来获取所有子节点,然后再取子节点的值

通过firstchild和lastchild访问子节点

2、添加界面books_add.php

3、修改界面books_modify.php

4、删除

Xpath

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

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

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

simpleXML

PHP5以上提供了一个simpleXML对象来操作XML.把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!"

}

 

 

展开阅读全文

没有更多推荐了,返回首页