PHP中使用xmlreader读取xml数据详细解释

 2016-12-28 10:14

之前,我在《PHP有专门解析XML的方法》中提到XMLReader可以很好的读取XML的数据。今天我又详细的研究了下,发现这个功能的确很强大,分享一个案例给大家。

使用的是zblogPHP系统,它可以自动生成一个feed.php的文件,通过读取它我们做了一个测试。先附上XML代码:

<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
    <channel>
        <title>拍拍看科技</title>
        <link>http://limiwu.com/</link>
        <description>关注科技产品和个人博客发展,注重用户体验和界面优化</description>
        <item>
            <title>新购买了一个域名:losehub.com</title>
            <link>http://limiwu.com/537.html</link>
            <description>最近新购买了一个域名losehub.com。准备来做一个PHP项目,
            具体的还在谋划中。不知道什么时候能开始制作呢。</description>
            <pubDate>Tue, 27 Dec 2016 14:47:25 +0800</pubDate>
        </item>
        ...
    </channel>
</rss>

我用PHP做了一个简单的方法来读取<item>里面的内容。情况如下:

<?php
$indexUrl='http://limiwu.com/feed.php';  
$reader = new XMLReader();  
$reader->open($indexUrl);  
$countElements = 0;  
 
while ($reader->read()){  
        if($reader->nodeType == XMLReader::ELEMENT){  
            $nodeName = $reader->name;  
        }  
        if($reader->nodeType == XMLReader::TEXT && !empty($nodeName)){  
            switch($nodeName){  
                case 'title':
                if ($reader -> depth == '4'){
                    $title = $reader->value;
                    }
                    break;   
                case 'link':
                if ($reader -> depth == '4'){
                    $link = $reader->value;
                    }
                    break;  
                case 'description':  
                    $description = $reader->value;  
                    break;  
                case 'pubDate':  
                    $pubDate = $reader->value;  
                    break;  
            }  
        }  
 }  
$reader->close();

echo $title.'<br />';
echo $link.'<br />';
echo $description.'<br />';
echo $pubDate;

?>

大体思路是这样的:XMLReader是按节点来读取数据的,所以我们可以直接寻找到需要的节点。虽然我们这里有两个不同的title和link,但因为赋值原则,值输出的还是最后赋予的。

这只是一个小小的输出,主要是用来理解XMLReader的用法的,具体的内容还需要大家自行完善。附上XMLReader常用手法、属性和常量等信息,方便大家查找使用。

XMLReader常量:

XMLReader::NONE = 0 ;
XMLReader::ELEMENT = 1 ;
XMLReader::ATTRIBUTE = 2 ;
XMLReader::TEXT = 3 ;
XMLReader::CDATA = 4 ;
XMLReader::ENTITY_REF = 5 ;
XMLReader::ENTITY = 6 ;
XMLReader::PI = 7 ;
XMLReader::COMMENT = 8 ;
XMLReader::DOC = 9 ;
XMLReader::DOC_TYPE = 10 ;
XMLReader::DOC_FRAGMENT = 11 ;
XMLReader::NOTATION = 12 ;
XMLReader::WHITESPACE = 13 ;
XMLReader::SIGNIFICANT_WHITESPACE = 14 ;
XMLReader::END_ELEMENT = 15 ;
XMLReader::END_ENTITY = 16 ;
XMLReader::XML_DECLARATION = 17 ;
XMLReader::LOADDTD = 1 ;
XMLReader::DEFAULTATTRS = 2 ;
XMLReader::VALIDATE = 3 ;
XMLReader::SUBST_ENTITIES = 4 ;

XMLReader方法:

a、XMLReader::XML
作用:载入 xml 字符串
用法:XMLReader::xml(string source [, string encoding [, int options]] )
参数:source,xml string;encoding,document encoding or NULL
返回:如果成功则返回 TRUE,失败则返回 FALSE。

b、XMLReader::open
作用:载入xml文件
用法:XMLReader::open(string url [, string encoding [, int options]] )
参数:url,连接到xml的链接;encoding,document encoding or NULL
返回:如果成功则返回 TRUE,失败则返回 FALSE。

c、XMLReader::read
作用:读取 xml,使解析器前进到下一个标记
用法:XMLReader::read(),在 while 循环中遍历整个文档
参数:NULL
返回:如果成功则返回 TRUE,失败则返回 FALSE。

d、XMLReader::getAttribute
作用:获取属性
用法:XMLReader::getAttribute(string name)
参数:name,属性名称
返回:如果成功则返回 属性值,失败则返回 FALSE。

e、XMLReader::isValid
作用:检验xml是否合法
用法:XMLReader::isValid()
参数:无
返回:如果成功则返回 true,失败则返回 FALSE。

f、XMLReader::moveToAttribute
作用:移动焦点到所指的属性上
用法:XMLReader::moveToAttribute(string name)
参数:name,属性名称
返回:如果成功则返回 true,失败则返回 FALSE。

g、XMLReader::moveToFirstAttribute
作用:移动焦点到第一个属性上
用法:XMLReader::moveToFirstAttribute()
参数:无
返回:如果成功则返回 true,失败则返回 FALSE。

h、XMLReader::moveToNextAttribute
作用:移动焦点到下一个属性上
用法:XMLReader::moveToNextAttribute()
参数:无
返回:如果成功则返回 true,失败则返回 FALSE。

i、XMLReader::moveToElement
作用:移动焦点到父节点当前属性上
用法:XMLReader::moveToElement()
参数:无
返回:如果成功则返回 true,失败则返回 FALSE。

j、XMLReader::close
作用:关闭xml输入
用法:XMLReader::close()
参数:无
返回:如果成功则返回 true,失败则返回 FALSE。

XMLReader属性:

a、XMLReader->attributeCount ;
作用:属性数量

b、XMLReader->baseURI ;
作用:节点的url

c、XMLReader->depth ;
作用:节点树的层数

d、XMLReader->hasAttributes ;
作用:检测是否有属性

e、XMLReader->hasValue ;
作用:是否有值

f、XMLReader->isEmptyElement ;
作用:是否是空标签

g、XMLReader->localName ;
作用:标签内部明

h、XMLReader->name ;
作用:标签名

i、XMLReader->nodeType ;
作用:节点类型

j、XMLReader->value ;
作用:节点文本内容


作者头像

作者:紫铜炉

自由博主,网页设计师。我关注科技产品和个人博客发展,注重用户体验和界面优化。