php : DOM 操作 XML
2016-11-22 20:17
656 查看
DOM 操作 XML
基本用法
XML文件:person.XML
<?xml version="1.0" encoding="utf-8" ?> <persons> <person> <name sex='男'>keen</name> <age>18</age> <edu>高中</edu> </person> <person> <name sex='女'>keen2</name> <age>19</age> <edu>初中</edu> </person> </persons>
person.xml
<?xml version="1.0" encoding="utf-8"?> <books> <book type="脚本语言"> <name>php</name> <price>48</price> </book> <book type="标记语言"> <name>xml</name> <price>60</price> </book> </books>
获取 DOM
$doc = new DOMDocument('1.0', 'utf-8'); $doc->preserveWhiteSpace = false; // 不保护空格, 即忽略掉空格 $doc->formatOutput = true; // 格式化输出, 保存 xml 的时候就不会太乱 $doc->load("./person.xml");
获取节点元素集合
$persons = $doc->getElementsByTagName("person");
获取元素集合的某一项
$firstChild = $persons->item(0);
获取某一元素的子元素
$childs = $firstChild->childNodes // 子元素集合
获取子元素自合的某一项
$child = $firstChild->childNodes->item(0)
获取元素的名
$firstChild->nodeName
获取元素的值
$child->nodeValue
获取某一元素的属性集合
$child->attributes
判断元素是否有属性
$child->attributes->length > 0 // >0, 说明有属性
获取属性的值或名
$node = $child->attributes->item(0); $node->value; // 属性值 $node->name; // 属性名 // // 或者指定获取某个属性的值 $firstChild->getAttribute('sex');
更新元素
$doc->documentElement->replaceChild($newNode, $oldNode);
移除元素
$node->parentNode->removeChild($node);
Demo
读取XML的值
以表格的形式输出<?php echo '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />'; $doc = new DOMDocument(); $doc->preserveWhiteSpace = false; // 不保护空格 $doc->load("./person.xml"); $persons = $doc->getElementsByTagName("person"); echo "<table border=1>"; // 输出标题 $firstChild = $persons->item(0); echo "<tr>"; foreach($firstChild->childNodes as $child){ echo "<td>"; echo $child->nodeName; echo "</td>"; } echo "</tr>"; // 内容 foreach($persons as $person){ echo "<tr>"; foreach($person->childNodes as $child){ echo "<td>"; echo $child->nodeValue; echo "</td>"; } echo "</tr>"; } echo "</table>"; ?>
创建 XML 文档
<?php $arrs = array( array('name'=>'php', 'type'=>'脚本语言'), array('name'=>'xml', 'type'=>'标记语言'), array('name'=>'c#', 'type'=>'动态语言') ); $doc = new DOMDocument('1.0', 'utf-8'); // 设置版本号和字符编码 $doc->formatOutput = true; // 格式化输出 $books = $doc->createElement('books'); // 创建元素节点 foreach($arrs as $arr){ $book = $doc->createElement('book'); $name = $doc->createElement('name', $arr['name']); // 创建 name 元素节点并赋值 $book->appendChild($name); $book->setAttribute('type', $arr['type']); // 设置元素属性并赋值 $books->appendChild($book); } $doc->appendChild($books); $doc->save('books.xml'); echo "写入Success"; ?>
递归遍历 XML
<?php function getChilds($node){ echo "<ul>"; if($node->nodeType == 3){ // 1:元素节点, 2:属性节点, 3:值节点, 9:根节点 echo "<li>" . $node->nodeValue . "</li>"; } else{ echo "<li>" . $node->nodeName . "</li>"; // 输出元素节点的名称 if($node->attributes->length > 0){ // 元素节点的属性个数大于0 : 此节点有属性 //echo "attr : " . $node->attributes->item(0)->value; 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; // 不保护空格 $doc->load("./books.xml"); $root = $doc->documentElement; // 获取最顶层元素 getChilds($root); ?>
结合 XPath 高效查询
<?php /* * XPath */ $doc = new DOMDocument('1.0', 'utf-8'); $doc->preserveWhiteSpace = false; $doc->load('./books.xml'); $xpath = new DOMXPath($doc); // 查询所有的书 $query = '/books/book/name'; $result = $xpath->query($query); echo "书名: <br>"; foreach($result as $nameNode){ echo $nameNode->nodeValue . "<br>"; } echo "<br>==========<br>"; // 查询指定类型的书 $query = '/books/book[@type="动态语言"]/name'; $result = $xpath->query($query); foreach($result as $nameNode){ echo $nameNode->nodeValue . "<br>"; } echo "<br>==========<br>"; // 通过为止来查询 $query = "/books/book[position()>1]/name"; $result = $xpath->query($query); foreach($result as $nameNode){ echo $nameNode->nodeValue . "<br>"; } ?>
SimpleXML基本使用
<?php /* * SimpleXML 演示 * 思路: 把 XML 字符串转成对象和数组 */ $path = "./books.xml"; $xml = file_get_contents($path); // 获取 xml 字符串 $simple = new SimpleXMLElement($xml); // 把字符串转成数组, 此代表根节点 // 查询 echo "<table border=1>"; foreach($simple->book as $book){ $attr = $book->attributes(); // 获取元素节点的属性 echo "<tr>"; echo "<td>". $book->name . "</td>"; echo "<td>" . $book->price . "</td>"; echo "<td>" . $attr['type'] . "</td>"; echo "</tr>"; } echo "</table>"; // 添加 /* $book = $simple->addChild("book"); $book->addChild("name", "c++"); $book->addChild("price", "50"); $book->addAttribute("type", "动态语言"); $simple->saveXML($path); echo "Add success"; */ // 更新 /* $book = $simple->xpath("/books/book[name='c#']"); // 找到 C#, 为数组 $book[0]->price = '100'; $simple->saveXML($path); echo "Update Success"; */ // 删除 // 使用 unset $book = $simple->xpath("/books/book[name='c++']"); // 找到 c++ for($i=0; $i<count($simple->book); $i++){ $currentBook = $simple->book[$i]; if($currentBook->name == "c++"){ unset($simple->book[$i]); } } $simple->saveXML($path); ?>
综合案例: XML 实现增删改查
传送门: -------->音乐信息管理--------
生活不止眼前, 还有诗和远方
相关文章推荐
- PHPl使用DOM XML操作XML[总结]
- PHP使用DOM XML操作XML[总结]
- PHP DOM操作xml文档,添加元素,添加元素属性
- PHP DOM操作xml实例:词典(xml) 查询词条
- 解析php DOMElement 操作xml 文档的实现代码
- PHP通过DOM操作XML
- PHP DOM操作xml文档,修改元素
- xml学习笔记②PHP DOM--对xml文件进行解析操作
- PHPdom操作查找xml标签文本
- DOM基础及php读取xml内容操作的方法
- PHPdom操作查找xml标签文本
- PHP DOM操作xml文档,删除一个,遍历删除所有(注意有陷阱)
- PHP通过DOM操作XML
- PHP通过DOM操作XML
- php dom操作存储xml节点
- php DOMElement 操作xml 文档的示例代码
- PHP DOM操作xml实例:词典(xml) 添加词条
- PHP DOM操作XML文档,查询遍历结点元素
- xml之phpdom操作