1. 使用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方法删除指定属性。

 

  1. 使用SimpleXML模型操作XML

  1. 初始化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方法添加新节点。

  1. 属性

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/>';
}

 

  1. 天气预报功能(数据传输)

 

地址: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 学习二的更多相关文章

  1. XML学习(二)

    1.上期回忆 XML基础 1)XML的作用 1.1 作为软件配置文件 1.2 作为小型的"数据库" 2)XML语法(由w3c组织规定的) 标签: 标签名不能以数字开头,中间不能有空 ...

  2. XML学习总结(二)——XML入门

    XML学习总结(二)——XML入门 一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(proc ...

  3. XML 学习介绍 收藏

    XML学习总结(一)——XML介绍 一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发 ...

  4. Hbase深入学习(二) 安装hbase

    Hbase深入学习(二) 安装hbase This guidedescribes setup of a standalone hbase instance that uses the local fi ...

  5. XML学习教程

    XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...

  6. SpringMVC入门学习(二)

    SpringMVC入门学习(二) ssm框架 springMVC  在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. mo ...

  7. Robot framework--内置库xml学习(一)

    Using lxml By default this library uses Python's standard ElementTree module for parsing XML, but it ...

  8. Android JNI学习(二)——实战JNI之“hello world”

    本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...

  9. (转)MyBatis框架的学习(二)——MyBatis架构与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/71699515 MyBatis框架的架构 MyBatis框架的架构如下图: 下面作简要概述: S ...

随机推荐

  1. hdu 5565 Clarke and baton 二分

    Clarke and baton Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...

  2. ListView添加项目带序列

    ListView添加项目带序列     function AddSelItems(listview1:TListView;ListView2:TListView):Boolean;var  s: st ...

  3. MFC Windows程序设计源代码免费下载

    本人近期在网上找到了<MFC Windows程序设计>第二版的书内程序的源代码,特意上传CSDN上面,供学习MFC的程序猿们免费下载. 源代码下载: http://download.csd ...

  4. Android Studio升级后projectBuild failed.

    近期在升级Android Studio后,发现原先能编译通过的project,突然就编译只是了,原因是生成的AndroidManifest.xml文件里有乱码. 升级后: android studio ...

  5. ptrace x64 转

    #include <sys/ptrace.h> #include <sys/types.h> #include <sys/wait.h> #include < ...

  6. 如何通过VIM把代码格式化后生成HTML网页代码

    本文转自http://wangxiaoyu.blog.51cto.com/922065/203471 需求及思路:演示需要,需要网站上嵌入一些代码,我的建议做法是根据代码文件,生成相应的HTML代码, ...

  7. 日志分析(三) kibana数据展示

    kibana最新版本支持自定义数据大盘了,今天试用了下,感觉非常棒.上图: 支持多维度定义视图,然后视图里面可以依据粗粒度维度进行图表归类.总之,比旧版本强大太多了.后面试试能否扩展加入耦合一定业务数 ...

  8. C#多线程交替赋值取值

    static AutoResetEvent auto=new AutoResetEvent(false); ; ; static void Main() { Thread th1 = new Thre ...

  9. btn控件

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. 用scikit-learn实现朴素贝叶斯分类器 转

    原文:http://segmentfault.com/a/1190000002472791 朴素贝叶斯(Naive Bayes Classifier)是一种「天真」的算法(假定所有特征发生概率是独立的 ...