解析xml文件以及解析xml字符串
不久前做了个功能需要读取xml文件,虽然以前也做过很多次了,但一直没有想过总结一下,今天正好空闲,于是小小总结一番,以方便以后用起来更加顺手,下面开始正文。
假设目前有如下xml源文件,该文件保存名为books.xml:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book>
<author>phpernote.com</author>
<title>PHP And MySQL Development</title>
<publisher>火星出版社</publisher>
</book>
<book>
<author>taobao.com</author>
<title>如何淘宝</title>
<publisher>淘宝出版社</publisher>
</book>
</books>
(1)利用simplexml读取xml文件,示例如下:
<?php
header('Content-type:text/html;charset=utf-8');
$books=simplexml_load_file('books.xml');//将XML中的数据,读取到数组对象中
foreach($books as $v){
echo $v->author."-".$v->title."-".$v->publisher."<br>";
}
如需更详细的了解 PHP SimpleXML 函数,请参考:PHP SimpleXML 函数
(2)利用DOMDocument读取xml文件,示例如下:
<?php
header('Content-type:text/html;charset=utf-8');
$doc=new DOMDocument();
$doc->load('books.xml');//读取xml文件
$book=$doc->getElementsByTagName('book');//取得book标签的对象数组
echo $book->length,'<br />';
foreach($book as $v){
$author=$v->getElementsByTagName('author');//取得author的标签的对象数组
$author=$author->item(0)->nodeValue;//取得node中的值
$title=$v->getElementsByTagName('title');
$title=$title->item(0)->nodeValue;
$publisher=$v->getElementsByTagName('publisher');
$publisher=$publisher->item(0)->nodeValue;
echo "$author - $title - $publisher <br />";
}
如需更详细的了解 DOMDocument 的有关方法,请参考php官方文档:The DOMDocument class
当然还有很多其他的办法,比如用正则表达式解析等等,这些以后用到的时候再继续追加总结,今天就写了这么两种办法吧,对于一般的已经足够了。
解析xml字符串
如果是xml文件,则用
$xml->load("timeline.xml");
如果是解析xml字符串则用
$xml->loadXML($xmlstring);
------------------------------------------------------
获得节点属性:getAttribute('id');
获得节点值:nodeValue;
$xml = new DOMDocument();
//$xml->load("timeline.xml");
$xmlstring = '<data><time value="2011-08-01"/>
<time value="2011-08-02"/>
<time value="2011-08-03">
<worker name="test1" id="14">
<hour pid="6" pmid="3">spot411</hour>
<hour pid="6" pmid="3">spot411</hour>
</worker>
</time>
<time value="2011-08-04">
<worker name="test2" id="6">
<hour pid="9" pmid="4">Pmlal</hour>
<hour pid="9" pmid="4">Pmlal</hour>
<hour pid="9" pmid="4">Pmlal</hour>
<hour pid="9" pmid="4">Pmlal</hour>
<hour pid="9" pmid="4">Pmlal</hour>
<hour pid="9" pmid="4">Pmlal</hour>
</worker>
</time>
<time value="2011-08-05">
<worker name="test3" id="1">
<hour pid="1" pmid="1">Teasavant</hour>
<hour pid="1" pmid="1">Teasavant</hour>
<hour pid="1" pmid="1">Teasavant</hour>
</worker>
<worker name="test4" id="2">
<hour pid="1" pmid="1">Teasavant</hour>
<hour pid="1" pmid="1">Teasavant</hour>
<hour pid="1" pmid="1">Teasavant</hour>
<hour pid="1" pmid="1">Teasavant</hour>
<hour pid="1" pmid="1">Teasavant</hour>
</worker>
<worker name="test5" id="4">
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
<hour pid="3" pmid="3">Red8interactive</hour>
</worker>
</time>
<time value="2011-08-06"/><time value="2011-08-07"/></data>';
$xml->loadXML($xmlstring);
$timedom = $xml->getElementsByTagName("time");
$d_array = array();
foreach ($timedom as $times){
$time_att_value = $times->getAttribute("value");
echo $time_att_value."<br>";
$d_worker = $times->getElementsByTagName("worker");
foreach ($d_worker as $d_work){
$worker_att_id = $d_work->getAttribute("id");
$worker_att_name = $d_work->getAttribute("name");
echo $worker_att_name."<br>";
//echo $worker_att_id."<br>";
$d_hours = $d_work->getElementsByTagName("hour");
foreach ($d_hours as $d_hour){
$hour_att_pid = $d_hour->getAttribute("pid");
$hour_att_pmid = $d_hour->getAttribute("pmid");
echo count($d_hour);
echo $d_hour->nodeValue."<br>";
}
}
}

浙公网安备 33010602011771号