PHP中使用xmlreader读取xml数据详细解释
之前,我在《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://blog.limiwu.com/</link> <description>关注科技产品和个人博客发展,注重用户体验和界面优化</description> <item> <title>新购买了一个域名:losehub.com</title> <link>http://blog.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://blog.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 ;
作用:节点的urlc、XMLReader->depth ;
作用:节点树的层数d、XMLReader->hasAttributes ;
作用:检测是否有属性e、XMLReader->hasValue ;
作用:是否有值f、XMLReader->isEmptyElement ;
作用:是否是空标签g、XMLReader->localName ;
作用:标签内部明h、XMLReader->name ;
作用:标签名i、XMLReader->nodeType ;
作用:节点类型j、XMLReader->value ;
作用:节点文本内容