解析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>"; } } }

  

 

posted @ 2015-04-09 11:39  咏怀感恩  阅读(57)  评论(0)    收藏  举报