PHP操作XML
程序员文章站
2022-05-27 14:49:16
...
PHP简单读取XML
DOM
DOM:Document object model,文档对象模型
节点的分类
- 元素节点
- 属性节点
- 值节点
- 注释节点
- 根节点(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!"
}
上一篇: GKCTF2020——CRYPTO
下一篇: [GKCTF2020]老八小超市儿