PHP用DOMDocument解析xml文件
2015-11-17 12:22
766 查看
例子1:
循环所有 "artist" 元素 (nodetypes = 1),查找与 JavaScript 所传数据向匹配的名字
找到 CD 包含的正确 artist
输出 album 的信息
xml文件:
xml文件分析:
php文件:
步骤:
循环所有 "artist" 元素 (nodetypes = 1),查找与 JavaScript 所传数据向匹配的名字
找到 CD 包含的正确 artist
输出 album 的信息
【注释1】 如果节点是元素节点,则nodeType属性返回的是1;如果是属性节点,则nodeType属性返回的是2。通过这方法排除掉非元素节点。
$x获取到的是ARTIST节点数组,因为真个xml文件有多个ARTIST节点,所以要用item(index)来确定当前是哪个ARTIST节点(按出现顺序排列)。
$x->item(0)表示第一个出现的ARTIST标签。
【注释2】 第$i+1个ARTIST节点的子节点是文本,所以nodeValue就是对应的文本内容。
例子2:
Me.xml
php
总结:
使用DOMDocument解析xml文件大概方法是:
1. 首先要建一个DOMDocument对象: $xml
= new DOMDocument();
2.加载xml文件: $xml->load("xmlfile.xml");
3.获得对应的标签:$xml->getElementsByTagName("A");
注意:
1>此时获取到的并不是某一个具体的标签,而是这一类标签,相当于该标签数组,所以要访问那一个具体的标签,还要通过
item(index)来获取到第index+1个标签。
2>通过$xml->item(insex)可以获取到某个标签,比如获得下面这个A标签:
<A id="ia" name="na" >
<B1 id="b1">1 </B1>
<B2 id="b2">2</B2>
<A>
A这个标签有两个属性和两个直接子节点。
获取某属性:$xml->item(insex)->attributes
获取第一个属性id:$xml->item(insex)->attributes->item(0);
如果是:echo $xml->item(insex)->attributes->item(0); 则输出结果是:id
获取属性的值:$xml->item(insex)->attributes->item(0)->nodeValue;
如果是:echo $xml->item(insex)->attributes->item(0)->nodeVale; 则输出结果是:ia
获取子节点:$xml->item(insex)->childNodes
获取第一个子节点B1 :$xml->item(insex)->childNodes->item(0);
如果是:echo $xml->item(insex)->childNodes->item(0); 则输出结果是:B1
获取属性的值:$xml->item(insex)->childNodes->item(0)->nodeValue;
如果是:echo $xml->item(insex)->childNodes->item(0)->nodeVale;
则输出结果是:1
但是item(1)未必就是对应这下一个标签,所以才有了例子1中的对nodeType的判断。
DOM item() 方法详解:
http://www.w3school.com.cn/jsref/met_nodelist_item.asp
DOM nodeType 属性
http://www.w3school.com.cn/jsref/prop_node_nodetype.asp
循环所有 "artist" 元素 (nodetypes = 1),查找与 JavaScript 所传数据向匹配的名字
找到 CD 包含的正确 artist
输出 album 的信息
xml文件:
<CATALOG> <CD> <TITLE>Empire Burlesque</TITLE> <ARTIST>Bob Dylan</ARTIST> <COUNTRY>USA</COUNTRY> <COMPANY>Columbia</COMPANY> <PRICE>10.90</PRICE> <YEAR>1985</YEAR> </CD> <CD> <TITLE>Hide your heart</TITLE> <ARTIST>Bonnie Tyler</ARTIST> <COUNTRY>UK</COUNTRY> <COMPANY>CBS Records</COMPANY> <PRICE>9.90</PRICE> <YEAR>1988</YEAR> </CD> ········· </CATALOG> |
php文件:
步骤:
循环所有 "artist" 元素 (nodetypes = 1),查找与 JavaScript 所传数据向匹配的名字
找到 CD 包含的正确 artist
输出 album 的信息
<?php $q=$_GET["q"]; $xmlDoc = new DOMDocument(); $xmlDoc->load("cd_catalog.xml"); $x=$xmlDoc->getElementsByTagName('ARTIST'); //通过ARTIST标签找到ARTIST结点 for ($i=0; $i<=$x->length-1; $i++) { //Process only element nodes if ($x->item($i)->nodeType==1) //【注释1】 { if ($x->item($i)->childNodes->item(0)->nodeValue == $q) //【注释2】 { $y=($x->item($i)->parentNode); } } } $cd=($y->childNodes); for ($i=0;$i<$cd->length;$i++) { //Process only element nodes if ($cd->item($i)->nodeType==1) { echo($cd->item($i)->nodeName); echo(": "); echo($cd->item($i)->childNodes->item(0)->nodeValue); echo("<br />"); } } ?> |
$x获取到的是ARTIST节点数组,因为真个xml文件有多个ARTIST节点,所以要用item(index)来确定当前是哪个ARTIST节点(按出现顺序排列)。
$x->item(0)表示第一个出现的ARTIST标签。
【注释2】 第$i+1个ARTIST节点的子节点是文本,所以nodeValue就是对应的文本内容。
例子2:
Me.xml
<?xml version="1.0" encoding="utf-8"?> <phplamp> <post> <title id="1">PHP XML处理介绍一</title> <details>详细内容一</details> </post> <post> <title id="2">PHP XML处理介绍二</title> <details>详细内容二</details> </post> <post> <title id="3">PHP XML处理介绍三</title> <details>详细内容三</details> </post> </phplamp> |
// 首先要建一个DOMDocument对象 $xml = new DOMDocument(); // 加载Xml文件 $xml->load("me.xml"); // 获取所有的post标签 $postDom = $xml->getElementsByTagName("post"); // 循环遍历post标签 foreach($postDom as $post){ // 获取Title标签Node $title = $post->getElementsByTagName("title"); /** * 要获取Title标签的Id属性要分两部走 * 1. 获取title中所有属性的列表也就是$title->item(0)->attributes * 2. 获取title中id的属性,因为其在第一位所以用item(0) * * 小提示: * 若取属性的值可以用item(*)->nodeValue * 若取属性的标签可以用item(*)->nodeName * 若取属性的类型可以用item(*)->nodeType */ echo "Id: " . $title->item(0)->attributes->item(0)->nodeValue . "<br />"; echo "Title: " . $title->item(0)->nodeValue . "<br />"; echo "Details: " . $post->getElementsByTagName("details")->item(0)->nodeValue . "<br /><br />"; } |
使用DOMDocument解析xml文件大概方法是:
1. 首先要建一个DOMDocument对象: $xml
= new DOMDocument();
2.加载xml文件: $xml->load("xmlfile.xml");
3.获得对应的标签:$xml->getElementsByTagName("A");
注意:
1>此时获取到的并不是某一个具体的标签,而是这一类标签,相当于该标签数组,所以要访问那一个具体的标签,还要通过
item(index)来获取到第index+1个标签。
2>通过$xml->item(insex)可以获取到某个标签,比如获得下面这个A标签:
<A id="ia" name="na" >
<B1 id="b1">1 </B1>
<B2 id="b2">2</B2>
<A>
A这个标签有两个属性和两个直接子节点。
获取某属性:$xml->item(insex)->attributes
获取第一个属性id:$xml->item(insex)->attributes->item(0);
如果是:echo $xml->item(insex)->attributes->item(0); 则输出结果是:id
获取属性的值:$xml->item(insex)->attributes->item(0)->nodeValue;
如果是:echo $xml->item(insex)->attributes->item(0)->nodeVale; 则输出结果是:ia
获取子节点:$xml->item(insex)->childNodes
获取第一个子节点B1 :$xml->item(insex)->childNodes->item(0);
如果是:echo $xml->item(insex)->childNodes->item(0); 则输出结果是:B1
获取属性的值:$xml->item(insex)->childNodes->item(0)->nodeValue;
如果是:echo $xml->item(insex)->childNodes->item(0)->nodeVale;
则输出结果是:1
但是item(1)未必就是对应这下一个标签,所以才有了例子1中的对nodeType的判断。
DOM item() 方法详解:
http://www.w3school.com.cn/jsref/met_nodelist_item.asp
DOM nodeType 属性
http://www.w3school.com.cn/jsref/prop_node_nodetype.asp
相关文章推荐
- composer php生态环境中用来管理依赖关系的工具
- phpstorm 10 初体验
- php,CGI,Fast-Cgi,php-fpm介绍
- php imagepng生成图片加文本或水印
- yii2 Event 使用2
- Yii 连接、修改 MySQL 数据库及phpunit 测试连接
- thinkphp注册功能---图片验证码
- 小熊安卓学习总结:ubuntu 10.04下的配置tftp服务器
- 简易的PHP分词方法
- PHP防止用户重复提交表单
- PHP安装threads多线程扩展基础教程
- 超详细的php用户注册页面填写信息完整实例(附源码)
- yii2 Event的使用 1
- 使用PHPexcel把excel数据导入数据库
- php添加为kindeditor水印问题
- laravel old
- 教大家制作简单的php日历
- PHP最彻底的退出登录,清除session、cookie的代码
- php mysqli查错
- PHP检测终端设备是平板、手机还是电脑