PHP用DOMDocument解析xml文件
来源:互联网 发布:海鹰数据 wish 编辑:程序博客网 时间:2024/06/13 01:17
例子1:
- 循环所有 "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>
xml文件分析:
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 nodesif ($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 nodesif ($cd->item($i)->nodeType==1) { echo($cd->item($i)->nodeName); echo(": "); echo($cd->item($i)->childNodes->item(0)->nodeValue); echo("<br />"); } }?>
【注释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<?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>
<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 />";
}
$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
1 0
- PHP用DOMDocument解析xml文件
- 解读PHP DOMDocument在解析XML文件中的作用
- Php Xml解析之DOMDocument使用方法
- PHP解析和生成xml(DOMDocument版)
- PHP通过DOMDocument操作解析xml
- PHP中用DOMDocument新建XML文件
- PHP XML解析之DOMDocument 方法实例讲解
- Php Xml解析之DOMDocument使用方法浅解
- asp中利用MSXML2.DOMDocument解析xml文件
- 如何使用PHP DOMDocument创建动态XML文件
- 如何使用PHP DOMDocument创建动态XML文件
- DOMDocument方法解析xml节点
- PHP XML操作类DOMDocument
- PHP XML操作类DOMDocument
- 今天用PHP解析xml时出现如下错误:php Fatal error: Class 'DOMDocument' not found。 环境:CentOS 5.5; PHP 5.3.8 解决方法:
- PHP DOMDocument操作 XML类 属性、方法
- PHP DOMDocument操作 XML类 属性、方法
- PHP DOMDocument 写xml 添加属性字段
- 全志科技的一道笔试题
- cocos2d 游戏引擎发展历史
- [笔记] 无线网络安全:记得随手关wifi
- java对象数组的文件存取
- Java线程池使用说明
- PHP用DOMDocument解析xml文件
- 五、Maven中央存储库
- 向文件中存取对象,对象要实现序列化接口
- Android个人面试总结
- 平衡二叉树及其应用场景
- StringBuffer一些知识
- UIControl中的相关属性和方法
- jdk环境变量配置
- NSDate和NSString之间的相互转换