本文实例总结了PHP读取XML格式文件的方法。分享给大家供大家参考,具体如下:

books.xml文件:
<books> <book> <author>Jack Herrington</author> <title>PHP Hacks</title> <publisher>O'Reilly</publisher> </book> <book> <author>Jack Herrington</author> <title>Podcasting Hacks</title> <publisher>O'Reilly</publisher> </book> </books>
1.DOMDocument方法
<?php
$doc = new DOMDocument();
$doc->load( 'books.xml' );
$books = $doc->getElementsByTagName( "book" );
foreach( $books as $book )
{
$authors = $book->getElementsByTagName( "author" );
$author = $authors->item(0)->nodeValue;
$publishers = $book->getElementsByTagName( "publisher" );
$publisher = $publishers->item(0)->nodeValue;
$titles = $book->getElementsByTagName( "title" );
$title = $titles->item(0)->nodeValue;
echo "$title - $author - $publisher\n";
echo "<br>";
}
?>
2.用 SAX 解析器读取 XML:
<?php
$g_books = array();
$g_elem = null;
function startElement( $parser, $name, $attrs )
{
global $g_books, $g_elem;
if ( $name == 'BOOK' ) $g_books []= array();
$g_elem = $name;
}
function endElement( $parser, $name )
{
global $g_elem;
$g_elem = null;
}
function textData( $parser, $text )
{
global $g_books, $g_elem;
if ( $g_elem == 'AUTHOR' ||
$g_elem == 'PUBLISHER' ||
$g_elem == 'TITLE' )
{
$g_books[ count( $g_books ) - 1 ][ $g_elem ] = $text;
}
}
$parser = xml_parser_create();
xml_set_element_handler( $parser, "startElement", "endElement" );
xml_set_character_data_handler( $parser, "textData" );
$f = fopen( 'books.xml', 'r' );
while( $data = fread( $f, 4096 ) )
{
xml_parse( $parser, $data );
}
xml_parser_free( $parser );
foreach( $g_books as $book )
{
echo $book['TITLE']." - ".$book['AUTHOR']." - ";
echo $book['PUBLISHER']."\n";
}
?>
3.用正则表达式解析 XML:
<?php
$xml = "";
$f = fopen( 'books.xml', 'r' );
while( $data = fread( $f, 4096 ) ) {
$xml .= $data;
}
fclose( $f );
preg_match_all( "/\<book\>(.*?)\<\/book\>/s", $xml, $bookblocks );
foreach( $bookblocks[1] as $block )
{
preg_match_all( "/\<author\>(.*?)\<\/author\>/", $block, $author );
preg_match_all( "/\<title\>(.*?)\<\/title\>/", $block, $title );
preg_match_all( "/\<publisher\>(.*?)\<\/publisher\>/", $block, $publisher );
echo( $title[1][0]." - ".$author[1][0]." - ".$publisher[1][0]."\n" );
}
?>
4.解析XML到数组
<?php $data = "<root><line /><content language=\"gb2312\">简单的XML数据</content></root>"; $parser = xml_parser_create(); //创建解析器 xml_parse_into_struct($parser, $data, $values, $index); //解析到数组 xml_parser_free($parser); //释放资源 //显示数组结构 echo "\n索引数组\n"; print_r($index); echo "\n数据数组\n"; print_r($values); ?>
5.检查XML是否有效
<?php
//创建XML解析器
$xml_parser = xml_parser_create();
//使用大小写折叠来保证能在元素数组中找到这些元素名称
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, true);
//读取XML文件
$xmlfile = "bb.xml";
if (!($fp = fopen($xmlfile, "r")))
{
die("无法读取XML文件$xmlfile");
}
//解析XML文件
$has_error = false; //标志位
while ($data = fread($fp, 4096))
{
//循环地读入XML文档,只到文档的EOF,同时停止解析
if (!xml_parse($xml_parser, $data, feof($fp)))
{
$has_error = true;
break;
}
}
if($has_error)
{
echo "该XML文档是错误的!<br />";
//输出错误行,列及其错误信息
$error_line = xml_get_current_line_number($xml_parser);
$error_row = xml_get_current_column_number($xml_parser);
$error_string = xml_error_string(xml_get_error_code($xml_parser));
$message = sprintf("[第%d行,%d列]:%s",
$error_line,
$error_row,
$error_string);
echo $message;
}
else
{
echo "该XML文档是结构良好的。";
}
//关闭XML解析器指针,释放资源
xml_parser_free($xml_parser);
?>
6.可用于精确的读取XML
test.xml
<?xml version="1.0" encoding="UTF-8" ?>
<SBMP_MO_MESSAGE>
<CONNECT_ID>100</CONNECT_ID>
<MO_MESSAGE_ID>123456</MO_MESSAGE_ID>
<RECEIVE_DATE>20040605</RECEIVE_DATE>
<RECEIVE_TIME>153020</RECEIVE_TIME>
<GATEWAY_ID>1</GATEWAY_ID>
<VALID>1</VALID>
<CITY_CODE>010</CITY_CODE>
<CITY_NAME>北京</CITY_NAME>
<STATE_CODE>010</STATE_CODE>
<STATE_NAME>北京</STATE_NAME>
<TP_PID>0</TP_PID>
<TP_UDHI>0</TP_UDHI>
<MSISDN>15933626501</MSISDN>
<MESSAGE_TYPE>8</MESSAGE_TYPE>
<MESSAGE>5618常年供应苗木,品种有玉兰、黄叶杨等。联系人:张三,电话:1234567890。</MESSAGE>
<LONG_CODE>100</LONG_CODE>
<SERVICE_CODE>9588</SERVICE_CODE>
</SBMP_MO_MESSAGE>
test.php:
<?php
$myData = array();
$file = file_get_contents("test.xml");
if(strpos($file, '<?xml') > -1) {
try {
//加载解析xml
$xml = simplexml_load_string($file);
if($xml) {
//echo $this->result;
//获取节点值
$CONNECT_ID = $xml->CONNECT_ID;
$MO_MESSAGE_ID = $xml->MO_MESSAGE_ID;
$RECEIVE_DATE = $xml->RECEIVE_DATE;
$RECEIVE_TIME = $xml->RECEIVE_TIME;
$GATEWAY_ID = $xml->GATEWAY_ID;
$VALID = $xml->VALID;
$CITY_CODE = $xml->CITY_CODE;
$CITY_NAME = $xml->CITY_NAME;
$STATE_CODE = $xml->CITY_CODE;
$STATE_NAME = $xml->STATE_NAME;
$TP_PID = $xml->TP_PID;
$TP_UDHI = $xml->TP_UDHI;
$MSISDN = $xml->MSISDN;
$MESSAGE_TYPE = $xml->MESSAGE_TYPE;
$MESSAGE = $xml->MESSAGE;//短信
$LONG_CODE = $xml->LONG_CODE;
$SERVICE_CODE = $xml->SERVICE_CODE;
preg_match("/(561)\d{1,2}/", $MESSAGE, $code);
switch($code[0]) {
case 5618 :
$myData[message] = $MESSAGE;
break;
default :
$myData[] = '没有短消息。';
break;
}
} else {
echo "加载xml文件错误。";
}
} catch(exception $e){
print_r($e);
}
} else {
echo "没有该XML文件。";
}
echo "<pre>";
print_r($myData);
echo "<hr>";
echo $myData[message];
?>
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线XML/JSON互相转换工具:
http://tools./code/xmljson
在线格式化XML/在线压缩XML:
http://tools./code/xmlformat
XML在线压缩/格式化工具:
http://tools./code/xml_format_compress
XML代码在线格式化美化工具:
http://tools./code/xmlcodeformat
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP针对XML文件操作技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP错误与异常处理方法总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
# PHP
# 读取
# XML格式文件
# PHP读取XML值的代码(推荐)
# 用PHP编写和读取XML的几种方式
# PHP中使用xmlreader读取xml数据示例
# DOM基础及php读取xml内容操作的方法
# php通过正则表达式记取数据来读取xml的方法
# php中使用DOM类读取XML文件的实现代码
# php读取XML的常见方法实例总结
# PHP简单读取xml文件的方法示例
# PHP使用DOM和simplexml读取xml文档的方法示例
# PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
# 文档
# 操作技巧
# 北京
# 程序设计
# 加载
# 相关内容
# 感兴趣
# 能在
# 给大家
# 更多关于
# 错误信息
# 所述
# 几款
# 面向对象
# 转换工具
# 再为
# 组中
# 短消息
# 可用于
# 总结了
相关文章:
建站之星备案流程有哪些注意事项?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
建站主机与虚拟主机有何区别?如何选择最优方案?
定制建站方案优化指南:企业官网开发与建站费用解析
建站之星客服服务时间及联系方式如何?
如何快速生成橙子建站落地页链接?
如何快速搭建高效香港服务器网站?
建站之星展会模版如何一键下载生成?
建站之星如何优化SEO以实现高效排名?
宁波免费建站如何选择可靠模板与平台?
如何通过多用户协作模板快速搭建高效企业网站?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何在云虚拟主机上快速搭建个人网站?
Android自定义listview布局实现上拉加载下拉刷新功能
如何通过虚拟主机空间快速建站?
如何快速搭建FTP站点实现文件共享?
seo网站制作优化,网站SEO优化步骤有哪些?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何确保FTP站点访问权限与数据传输安全?
制作证书网站有哪些,全国城建培训中心证书查询官网?
如何通过宝塔面板实现本地网站访问?
网站设计制作企业有哪些,抖音官网主页怎么设置?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
建站之星安装需要哪些步骤及注意事项?
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
5种Android数据存储方式汇总
如何在阿里云香港服务器快速搭建网站?
网站制作免费,什么网站能看正片电影?
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何快速搭建虚拟主机网站?新手必看指南
宝塔建站无法访问?如何排查配置与端口问题?
建站之星多图banner生成与模板自定义指南
如何通过服务器快速搭建网站?完整步骤解析
建站之星代理费用多少?最新价格详情介绍
临沂网站制作公司有哪些,临沂第四中学官网?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
Swift开发中switch语句值绑定模式
网站视频怎么制作,哪个网站可以免费收看好莱坞经典大片?
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
湖州网站制作公司有哪些,浙江中蓝新能源公司官网?
微课制作网站有哪些,微课网怎么进?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
小型网站制作HTML,*游戏网站怎么搭建?
青浦网站制作公司有哪些,苹果官网发货地是哪里?
建站之星在线客服如何快速接入解答?
如何用y主机助手快速搭建网站?
建站之星好吗?新手能否轻松上手建站?
如何通过西部数码建站助手快速创建专业网站?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。