0

0

PHP 处理XML文件实例详解

php中文网

php中文网

发布时间:2016-05-25 16:42:13

|

1598人浏览过

|

来源于php中文网

原创

xml的精髓是什么呢?

就是我们基于信息描述的,能够体现数据信息之间逻辑关系的,可以确保文件的易读性和易搜索性的自定义标记.

你的XML文件遵循所谓“形式良好”要求的种种语法规则,一个完全意义上的XML文件不仅应该是“形式良好的”,而且还应该是使用了这些自定义标记的“有效”的XML文件.

一个XML文件必须遵守文件类型描述DTD(Document Type Definition)中定义的种种规定,DTD实际上是“元标记”这个概念的产物,它描述了一个标记语言的语法和词汇表,也就是定义了文件的整体结构以及文件的语法,简而言之,DTD规定了一个语法分析器为了解释一个“有效的”XML文件所需要知道的所有规则的细节.

如何写一个XML文件

立即学习PHP免费学习笔记(深入)”;

1. 第一个行

2. 必须有一个最外层的标记

3. XML标记不区分大小写,使用中文都可以,开始标记是什么,结束就必须是什么

4. 所有的XML标记必须有结束

5. 所有的属性值必须使用比引号

6. 层次要清楚

7. 相同标记不能嵌套

8. 可以使用实体 & ;

9. 注释问题

aspx1财付通支付接口源码
aspx1财付通支付接口源码

本支付接口的特点,主要是用xml文件来记录订单详情和支付详情。代码比较简单,只要将里面的商户号、商户key换成你自己的,将回调url换成你的网站,就可以使用了。通过这个实例也可以很好的了解一般在线支付接口的基本工作原理。其中的pay.config文件记录的是支付详情,order.config是订单详情

下载

10.

PHP如何处理XML文件

其实使用php的xml解析函数,处理xml文档无异于处理文件,只要你根据自己的具体需求编写好几个处理函数就万事大吉了,明白了xml文件的读取,那么生成xml文件也就不成问题了,需要注意的问题是注意xml文件的编码和书写规范.

下面是手册里的例子,确实是经典的例子,代码如下:

$name"; 
	    if (sizeof($attribs)) { 
	        while (list($k, $v) = each($attribs)) { 
	            print " $k="$v""; 
	        } 
	    } 
	    print ">"; 
	} 
	//结束标记处理并显示 
	function endElement($parser, $name) { 
	    print "$name>"; 
	} 
	//处理数据部分 
	function characterData($parser, $data) { 
	    print "$data"; 
	} 
	//处理指令(PI)处理器 参数处理函数 
	function PIHandler($parser, $target, $data) { 
	    switch (strtolower($target)) { 
	        case "php": 
	            global $parser_file; 
	            // If the parsed document is "trusted", we say it is safe 
	            // to execute PHP code inside it.  If not, display the code 
	            // instead. 
	            if (trustedFile($parser_file[$parser])) { 
	                eval($data); 
	            } else { 
	                printf("Untrusted PHP code: %s", 
	                        htmlspecialchars($data)); 
	            } 
	            break; 
	    } 
	} 
	//默认处理句柄 
	function defaultHandler($parser, $data) { 
	    if (substr($data, 0, 1) == "&" && substr($data, -1, 1) == ";") {//判断数据是否为外部实体,注意这种判断方法。 
	        printf('%s', 
	                htmlspecialchars($data)); 
	    } else { 
	        printf('%s', 
	                htmlspecialchars($data)); 
	    } 
	} 
	//外部实体处理句柄 
	function externalEntityRefHandler($parser, $openEntityNames, $base, $systemId,$publicId) { 
	    if ($systemId) { 
	        if (!list($parser, $fp) = new_xml_parser($systemId)) { 
	            printf("Could not open entity %s at %sn", $openEntityNames, 
	                   $systemId); 
	            return false; 
	        } 
	        while ($data = fread($fp, 4096)) { 
	            if (!xml_parse($parser, $data, feof($fp))) { 
	                printf("XML error: %s at line %d while parsing entity %sn", 
	                       xml_error_string(xml_get_error_code($parser)), 
	                       xml_get_current_line_number($parser), $openEntityNames); 
	                xml_parser_free($parser); 
	                return false; 
	            } 
	        } 
	        xml_parser_free($parser); 
	        return true; 
	    } 
	    return false; 
	} 
	//xml分析器。 
	function new_xml_parser($file) { 
	    global $parser_file; 
	    $xml_parser = xml_parser_create(); //建立一个 XML 解析器,此函数返回解释器的操作句柄。 
	    xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 1); //设置是否采用大小写折叠,及目标编码 
	    xml_set_element_handler($xml_parser, "startElement", "endElement");//建立起始和终止元素处理器,bool 
	    xml_set_character_data_handler($xml_parser, "characterData");//建立字符数据处理器,bool 
	    xml_set_processing_instruction_handler($xml_parser, "PIHandler");//建立处理指令(PI)处理器 
	    xml_set_default_handler($xml_parser, "defaultHandler"); //默认处理器 
	    xml_set_external_entity_ref_handler($xml_parser, "externalEntityRefHandler");//外部实体指向处理器 
	    
	    if (!($fp = @fopen($file, "r"))) { 
	        return false; 
	    } 
	    if (!is_array($parser_file)) { 
	        settype($parser_file, "array");//将文件处理变量设为array类型 
	    } 
	    $parser_file[$xml_parser] = $file; //?将文件名赋值给以解释器操作句柄为索引的数组?(解释器的句柄以资源记录的形式返回) 
	//    echo "parser = "; 
	//    print_r($parser_file); 
	//    echo "
$xml_parser"; // echo "
"; return array($xml_parser, $fp); //解释器的操作句柄 和待分析文件的句柄 } if (!(list($xml_parser, $fp) = new_xml_parser($file))) { die("could not open XML input"); } print "
"; 
	while ($data = fread($fp, 4096)) { 
	    if (!xml_parse($xml_parser, $data, feof($fp))) {//此处采用条件赋值。当条件表达式失效时执行if处理,否则跳过。 
	        die(sprintf("XML error: %s at line %dn", 
	                    xml_error_string(xml_get_error_code($xml_parser)), 
	                    xml_get_current_line_number($xml_parser))); 
	    } 
	}//开源代码phprm.com 
	print "
";  print "parse completen";  xml_parser_free($xml_parser);   

xmltest.xml文件,实例代码如下:

 
	 
	 Title  
	  
	   
	    
	     
	     a1b1c1 
	     a2c2 
	     a3b3c3 
	     
	    
	   
	  
	 
About this Document

还有一个是将xml文件处理成php数组的例子,代码如下:

$v) 
	            $this->$k = $aa[$k]; 
	    } 
	} 
	function readDatabase($filename) { 
	    // read the xml database of aminoacids 
	    $data = implode("",file($filename));//首先将整篇文章读入数组,之后再将数组连接成字符串,赋值给$data. 
	    $parser = xml_parser_create(); 
	    xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);//不使用大小写折叠 
	    xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,1); 
	    xml_parse_into_struct($parser,$data,$values,$tags);//将 XML 数据解析到数组中,该函数将 XML 文件解析到两个对应的数组中, 
	                //$tags 参数含有指向 $values 数组中对应值的指针。最后两个数组参数可由指针传递给函数。 
	    xml_parser_free($parser); 
	    // loop through the structures 
	    //针对具体的应用(不同的xml文件,修改此处循环结构得到具体的数组即可。 
	    foreach ($tags as $key=>$val) { 
	        if ($key == "molecule") { 
	            $molranges = $val; 
	            // each contiguous pair of array entries are the 
	            // lower and upper range for each molecule definition 
	            for ($i=0; $i < count($molranges); $i+=2) { 
	                    $offset = $molranges[$i] + 1; 
	                $len = $molranges[$i + 1] - $offset; 
	                $tdb[] = parseMol(array_slice($values, $offset, $len)); 
	            } 
	        } else { 
	            continue; 
	        } 
	    }  
	//    echo "values is:"; 
	//    print_r($values); 
	//    echo ""; 
	    return array($tdb,$values); 
	} 
	function parseMol($mvalues) { 
	    for ($i=0; $i < count($mvalues); $i++) 
	        $mol[$mvalues[$i]["tag"]] = $mvalues[$i]["value"]; 
	        
	//    echo " after parsemol :"; 
	//    print_r($mol); 
	//    echo ""; 
	    return new AminoAcid($mol); 
	} 
	$db = readDatabase("moldb.xml"); 
	echo "** Database of AminoAcid objects:n"; 
	   // echo " readdatabase :"; 
	    print_r($db[0]); 
	   // echo ""; 
	 
	$s = parseMol($db[1]); 
	 

副 moldb.xml,代码如下:

 
	     
	        Alanine 
	        ala 
	        A 
	        hydrophobic 
	     
	     
	        Lysine 
	        lys 
	        K 
	        charged 
	     
	 

教程链接:

随意转载~但请保留教程地址★

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Django 教程
Django 教程

共28课时 | 3.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

Sass 教程
Sass 教程

共14课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号