html 第3章 XML html 第3章 XML

2016-07-11

一、发展历史

1、XML 全称 extensiable markup language 可扩展标记语言

2、XML 之父 —— Tim Bray

3、html 的缺点

① 标签是规定好的,用户不能自定义

② 显示样式和数据绑定在一起,数据无复用

③ html 标签没有含义

4、为什么需要 xml

① 可作为程序间通讯的标准,用 xml 传递数据,具有良好的可读性和可维护性

② 可作为配置文件

③ 可充当小型数据库

二、XML 语法

https://file.lulublog.cn/images/3/2022/08/F7N7RxviGeIa8oRcE9AKaAKMi8a9RR.png

三、XML 文件约束

https://file.lulublog.cn/images/3/2022/08/BZJVD7qwjPzAPZK14yPFPNwYwaHw0J.png

四、PHP XML 编程

—— 常用的三种:dom、xpath、simpleXML

4.1、DOM:文档对象模型 document object model

(1)核心思想:把 XML 看成对象模型,通过对象方式操作

(2)CRUD 操作

① 查询

$Xmldoc = new DOMDocument(); 创建一个 DOMDocument 对象
$Xmldoc->load("classes.xml"); 指定加载 XML
$stus = $Xmldoc->getElementsByTagName("学生");

② 添加

$stu_node = $Xmldoc->createElement("学生"); 创建学生节点
$stu_node->setAttribute("性别","男"); 创建属性节点
$stu_node->appendChild($stu_node_name); 挂载
$Xmldoc->save("classes.xml"); 保存xml

③ 删除

$stu1->parentNode->removeChild($stu1);

④ 更新

$stu1_age->nodeValue += 10;

(3)DOM 的缺点:可以跨层取出,但不能保持层级关系

4.2、Xpath

XML Path Language

 —— 一种标志节点位置的语言

(1)核心思想:通过 Xpath 迅速简洁定位你要查找的节点

(2)创建 XPath

$doc = new DOMDocument();
$xpath = new DOMXpath($doc);
$items = $xpath->query("XPath路径表达式");

XPath 路径表达式: /、//、*、[ ]、@id、...

4.3、SimpleXML

以面向对象方式操作 XML 文件

(1)PHP 5 中的 SimpleXML 可将 XML 文件元素转化为对象,相同子元素转换为对象数组

(2)载入 XML 文件

① 直接

$libary = simpleXml_load_file("booke.xml");

② 装载 DOM 对象

$dom = new DOMDocument();
$dom->preservrWhiteSpace = false;
$dom->load("book.xml");
$libary = simpleXml_import_dom($dom);

③ 装载 string

https://file.lulublog.cn/images/3/2022/08/ND37zA27XAJLF7rJFDxWpja2aXg4Li.png

(3)simpleXml 结合 XPath 使用

$titles = $libary->XPath("//title");

4.4、php 怎么解析从网页中获取的 xml 数据

$apistr=file_get_contents("http://api.map.baidu.com/telematics/v2/weather?location=%E4%B8%8A%E6%B5%B7&ak=B8aced94da0b345579f481a1294c9094"); //获取xml内容
$apiobj=simplexml_load_string($apistr);//解析xml代码
$todayobj=$apiobj->results->result[0]->date;//读取星期
$weatherobj=$apiobj->results->result[0]->weather;//读取天气
$windobj=$apiobj->results->result[0]->wind;//读取风力
$temobj=$apiobj->results->result[0]->temperature;//读取温度
$contentStr = "上海\n{$todayobj}\n天气:{$weatherobj}\n风力:{$windobj}\n温度:{$temobj}";
echo $contentStr;

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开微信扫一扫,即可进行扫码打赏哦

阅读 2827