Xml 学习二
使用PHPDOM模型操作XML
XML的树状结构:
s
1、xml文档
1.1、创建DOM树
//创建DOM树
$M = new DOMDocument('1.0','utf-8');
1.2、加载XML文档
//加载要解析的XML文档
$M->load('demo.xml');
1.3、保存xml文档(暂留)
$M->save('demo.xml');
语法说明:save(fileName)
参数说明:另存为文档的名称
2、通过PHPDOM模型操作元素
2.1、查询
基本语法:
$M->getElementsByTagName('age')->item(0)->nodeValue;
- 语法详解1:getElementsByTagName(nodeName)
参数详解:nodeName 要查询节点的名称
- 语法详解2:item(index)
参数详解:index 索引
实例代码:
//1、查询节点
$data1 = $M->getElementsByTagName('name')->item(0)->nodeValue;
$data2 = $M->getElementsByTagName('name')->item(1)->nodeValue;
$data3 = $M->getElementsByTagName('name')->item(2)->nodeValue;
echo $data1.'<hr/>';
echo $data2.'<hr/>';
echo $data3.'<hr/>';
运行效果:

- 语法详解3: nodeValue 节点内容值
- 语法详解:如果要把创建的新节点插入到根元素中,必须找到根元素。
$M->documentElement->appendChild($newNode);
$M->getElementsByTagName('person')->item(0)->appendChild($newNode);
21、创建
$M->createElement('class','PHP十五期');
- 语法说明:createELement(nodeName,Value);
参数说明:nodeName 新建节点的名称
Value [可选]新建节点的值
- 拓展:创建一个有子元素的元素。
示例代码:
//1、实例化 DOMDocument
$M = new DOMDocument('1.0','utf-8');
//2、载入XML文档
$M->load('demo.xml');
//3、创建一个包含子元素的元素
//创建一个父节点
$parentNode = $M->createElement('class');
//创建两个子节点
$childNode1 = $M->createElement('class1','PHP15期');
$childNode2 = $M->createElement('class2','PHP16期');
//将创建的子节点插入到创建的父节点中
$parentNode->appendChild($childNode1);
$parentNode->appendChild($childNode2);
//将创建的父节点插入到根元素中。
$M->documentElement->appendChild($parentNode);
//4、另存为
$M->save('newXML.xml');
2.3、修改
//1、实例化
$M= new DOMDocument('1.0','utf-8');
//2、载入被解析的XML文档
$M->load('demo.xml');
//3、修改XML元素内容
//3.1找到被修改的节点
$oldNode = $M->getElementsByTagName('class')->item(0);
$newNode = $M->createElement('class','PHP16期');
//3.2到被修改的父元素
$rootNode = $M->documentElement;
//3.3在父元素中修改子元素
$rootNode->replaceChild($newNode,$oldNode);
//4、另存为XML文件
$M->save('replace.xml');
- 基本语法:replaceChild(newNode,oldNode)
- 参数说明:newNode 使用createELmenet方法创建的元素
oldNoed 使用getElemente方法找到的被替换的元素
2.4、删除
//1实例化
$M= new DOMDocument('1.0','utf-8');
//2载入xml
$M->load('replace2.xml');
//3删除节点
//3.1、找到要删除节点的父节点
$parentNode = $M->getElementsByTagName('name')->item(2);
//3.2、找到要删除的节点
$oldNode
= $M->getElementsByTagName('nikeName')->item(0);
//3.3、基于父节点删除节点
$parentNode->removeChild($oldNode);
//4、另存为xml文件
$M->save('remove2.xml');
基本语法:removeChild(oldNode)
参数说明:oldNode是通过getElementsByTageName 找到的要删除节点
思路总结:要删除一个节点,我们必须先找到它的父节点,然后找到要删除的节点,在要删除元素的父节点上使用removeChild方法删除旧节点
3、属性
3.1查询属性
//1、实例化
$M = new DOMDocument('1.0','utf-8');
//2、载入xml文档
$M->load('attribte_get.xml');
//3、找到要操作的书写的节点
$node = $M->getElementsByTagName('zhang_san')->item(0);
//4、基于找到的节点上查询要查询的属性
$attributeValue = $node->getAttribute('sex');
echo '我是'.$node->getAttribute('name').'我的年龄'
.$node->getAttribute('age')
.'我的性别'.$node->getAttribute('sex');
语法说明:getAttribute(Name)
参数说明:name 要查询属性的名称
思路整理:找到要查询数据所在的元素,在该元素上使用getAttribute()方法,查询具体的属性。
3.2添加/修改属性
//1、实例化
$M = new DOMDocument('1.0','utf-8');
//2、载入xml文档
$M->load('attribute_get.xml');
//3、找到要添加属性的节点
$node = $M->getElementsByTagName('zhang_san')->item(0);
//3.1、设置属性
$node->setAttribute('job','程序猿');
//4、保存XMl文档
$M->save('attribute_save.xml');
- 基本语法:setAttribute(name,value);
- 参数说明:name 属性的名称
Value 属性的值
- 思路整理1:如果要添加一个属性的值,那么我们先得找到要添加属性的元素,然后基于该元素,通过setAttribute方法设置属性。
- 思路整理2:使用setAttribute方法,如果该元素中存在该属性,那么该属性会被修改,如果该属性不存在,会添加一个新的属性。
3.3、删除属性
//1、实例化
$M = new DOMDocument('1.0','utf-8');
//2、载入xml文档
$M->load('attribute_save.xml');
//3、删除属性
//3.1、找到属性所在节点
$parentNode = $M->getElementsByTagName('zhang_san')->item(0);
//3.2、在该元素上操作属性
$parentNode->removeAttribute('sex');
//4、保存
$M->save('attribute_remove.xml');
- 基本语法:removeAttribute(name);
- 参数说明:name 属性的名称
- 思考整理:要删除的一个元素的属性,必须要先找到该元素,然后基于该元素使用removeAttribute方法删除指定属性。
使用SimpleXML模型操作XML
初始化DOM 模型
$M = simplexml_load_file('demo.xml');
语法说明:Simplexml_load_file(fileName)
参数说明:fileName 要解析的XML文档路径
2、节点
2.1、查询子节点
实例代码:
$M
= simplexml_load_file('demo.xml');
//获取根元素下数据
echo '我是'.$M->name.'我的芳龄'.$M->age.'我的性别'.$M->sex;
//获取有子节点的元素中的数据
echo '<hr/>';
$arr = $M->sex;
foreach($arr as $item){
echo $item->sex1;
echo '<br>';
echo $item->sex2;
echo '<br>';
echo $item->sex3;
}
2.2、添加子节点
//载入XML文档
$M = simplexml_load_file('demo.xml');
//在根元素下添加一个新节点
$M->addChild('job','PHP工程师');
//在name节点中添加子节点
$M->name->addChild('name1','大明');
$M->name->addChild('name2','小明');
$M->name->addChild('name3','三明');
//另存为XML
$M->asXML('data.xml');
基本语法:addChild(name,value);
参数详解:name 要创建的元素的名称
Value 元素中包含的内容
思路整理:找到要添加子节点的节点,在该节点上使用addChild方法添加新节点。
属性
2.1、查询属性
//载入要解析的XML
$M = simplexml_load_file('demo.xml');
//要查询属性的元素
$node = $M->name;
//在该元素中使用attributes()获取该元素上的属性对象
echo $node->attributes()->id;
- 基本语法:attribute() 返回该元素上的属性对象
- 思路整理:找到该元素,在该元素上使用attributes方法返回该元素上的属性对象,通过调用对象属性的方式,来获取该元素上属性的值。
2.2、添加属性
//载入要解析的XML
$M = simplexml_load_file('demo.xml');
//要查询属性的元素
$node = $M->name;
//在该元素中使用attributes()获取该元素上的属性对象
echo $node->attributes()->id;
//给元素添加一个属性
$node->addAttribute('nikeName','王二明');
//保存XML数据
$M->asXML('data2.xml');
基本语法: addAttribute(name,value);
参数详解:name 属性名称
Value 属性的值
4、xpath
4.1、通过绝对路径(/根元素/具体元素)查询节点内容
$M = simplexml_load_file('demo.xml');
//通过绝对路径查询节点
$arr = $M->xpath('/person/sex');
//通过数组方式获取元素内容
//$arr[0]->name;
foreach($arr as $item){
echo $item->sex1;
echo '<br>';
echo $item->sex2;
echo '<br>';
echo $item->sex3;
}
4.2、通过相对路径(//)查询元素内容
$M
= simplexml_load_file('demo.xml');
$arr = $M->xpath('//job');
foreach($arr as $item){
echo $item->job1;
echo '<br>';
echo $item->job2;
echo '<br>';
echo $item->job3;
}
4.3、通过星号(*)查询元素内容
$M
= simplexml_load_file('demo.xml');
$arr = $M->xpath('//job/*');
foreach($arr as $item){
echo $item;
echo '<hr/>';
}
4.4、通过[]查询
$M = simplexml_load_file('demo.xml');
$arr = $M->xpath('//job[title="产品经理"]');
foreach($arr as $item){
echo $item->title;
echo '<hr/>';
}
语法说明:xpath(//nodeNmae[index])
参数说明:index为索引,在xpath中索引从1开始。
在[]查询中我们可以使用 < > = 来获相应的元素。
4.5、通过[@id]来查询满足条件的元素
获取有id属性的元素。
$M = simplexml_load_file('demo.xml');
$arr = $M->xpath('//job[@id]');
foreach($arr as $item){
echo $item->title;
echo '<hr/>';
}
天气预报功能(数据传输)
地址:http://developer.baidu.com/map/
http://developer.baidu.com/map/index.php?title=car/api/weather
http://api.map.baidu.com/telematics/v3/weather?location=%E5%B9%BF%E5%B7%9E&output=xml&ak=etMu685CaL7cdtC2Ab6TkILU
//将数据保存到本地
if(!is_file('weather.xml')){
$ak = 'etMu685CaL7cdtC2Ab6TkILU';
$city = '广州';
$url = "http://api.map.baidu.com/telematics/v3/weather?location={$city}&output=xml&ak={$ak}";
$data = file_get_contents($url);
file_put_contents('weather.xml',$data);
}
//读取本地缓存数据
$cache = file_get_contents('weather.xml');
//解析缓存xml数据
$M = new DOMDocument('1.0','utf-8');
$M->load('weather.xml');
$currentCity = $M->getElementsByTagName("currentCity")->item(0)->nodeValue;
$date = $M->getElementsByTagName("date")->item(0)->nodeValue;
$weather = $M->getElementsByTagName("weather")->item(0)->nodeValue;
$dayPictureUrl = $M->getElementsByTagName("dayPictureUrl")->item(0)->nodeValue;
$nightPictureUrl = $M->getElementsByTagName("nightPictureUrl")->item(0)->nodeValue;
echo '当前城市:'.$currentCity;
echo '<hr/>';
echo '实时温度:'.$date;
echo '<hr/>';
echo '天气情况:'.$weather."<img src='{$dayPictureUrl}'>"."<img src='{$nightPictureUrl}'>";
echo '<hr/>';
Xml 学习二的更多相关文章
- XML学习(二)
1.上期回忆 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空 ...
- XML学习总结(二)——XML入门
XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...
- XML 学习介绍 收藏
XML学习总结(一)——XML介绍 一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发 ...
- Hbase深入学习(二) 安装hbase
Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...
- XML学习教程
XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...
- SpringMVC入门学习(二)
SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...
- Robot framework--内置库xml学习(一)
Using lxml By default this library uses Python's standard ElementTree module for parsing XML, but it ...
- Android JNI学习(二)——实战JNI之“hello world”
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- (转)MyBatis框架的学习(二)——MyBatis架构与入门
http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...
随机推荐
- Middleware课程01-概述
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源.中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯.是连接两个独立应用程序或独立系统的软件.相 ...
- Educational Codeforces Round 2 E. Lomsat gelral 启发式合并map
E. Lomsat gelral Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/600/prob ...
- Codeforces Gym 100418J Lucky tickets 数位DP
Lucky ticketsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view ...
- C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
C# 强制关闭当前程序进程(完全Kill掉不留痕迹) /// <summary> /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID ...
- C/C++学习站点资源
学习论坛: 轩辕软件论坛 中国IT实验室C/C++论坛 编程爱好者论坛 编程中国论坛 进阶站点: 浙江工业 http://acm.zjut.edu.cn 浙江大学 http://acm.zju.edu ...
- aspose.cells 模版
aspose.cells 模版 http://www.cnblogs.com/whitewolf/archive/2011/03/21/Aspose_Cells_Template1.html
- pager 命令
https://www.percona.com/blog/2013/01/21/fun-with-the-mysql-pager-command/ Last time I wrote about a ...
- XCode帮助文档离线下载解决办法
1.菜单栏Xcode->Preferences选择Documentation,在线下载 2.离线下载(用迅雷即可下载) 在上述在线下载列表中,点击某一列,下拉框可看见 info,可得到其网络所在 ...
- [Java] HashMap、TreeMap、Hashtable排序
Java中对Map(HashMap,TreeMap,Hashtable等)的排序时间 首先简单说一下他们之间的区别: HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可 ...
- Android(java)学习笔记82:我们到底该如何处理异常?
我们到底该如何处理异常? 原则: 如果该功能内部可以将问题处理,用try,自己能解决就自己解决问题. 如果处理不了,交由调用者处理,这是用throws,自己不能解决的问题,我们就抛出去交个调用者解决这 ...