PHP xml_parse_into_struct 函数详细解析
来源:互联网 发布:网站排名优化 编辑:程序博客网 时间:2024/06/14 22:57
函数原型:int xml_parse_into_struct (resource $parser , string $data , array &$values [, array&$index ] )
参数说明:@param-->$parser XML解析器,由xml_parser_create()生成一个XML资源句柄。
@param-->$data 带解析的XML字符串。
@param--> &$value 解析完成后生成的数据数组。
通常包括:1. 标签名字,例如<bookname>parse xml sources</bookname>,则标签名字为:bookname
2. 标签所处状态(或者说是类型),<bookname>parse xml sources</bookname>,当解析器读取到<bookname>,则标签类型为:open(开启状态),当解析器读取到</bookname>时,则标签类型为:close(闭合状态)
3. 当前元素所处XML解析数的第几层(XML通常被解析为一颗倒置树,根(顶层元素)处于第一层 )比如 <book><bookname>parse xml sources</bookname><authors>aaaa, bbbb</authors></book>中,book标签所标记的元素处于解析数的第一层,即level为1, bookname和authors标签所标记的元素都处于解析数的第二层,即level为2
4. 可选的值。在例子<book><bookname>parse xml sources</bookname><authors>aaaa, bbbb</authors></book>中,bookname标签所标记的取值为字符串 " parse xml sources" ,authors标签所标记的取值为字符串" aaaa,bbbb" 。 而book标签所标记的元素没有直接的字符结点所以取值为空(或者NULL)
@param-->&$index 解析完成后生成的对应数组$value中元素取值的索引数组,从 0 开始统计。比如在 <book><bookname>parse xml sources</bookname><authors>aaaa, bbbb</authors></book>中,<book>所代表的其实标签处于索引数组中的0位置,<bookname>parse xml sources</bookname>所代表的结点处于索引数组中的位置为1, <authors>aaaa, bbbb</authors>所代表的结点在索引数组中的位置为2,</book>所代表的闭合标签所处的位置则为3, 所以book所代表的取值范围为book{0,3},bookname的取值范围为bookname{1}, authors的取值范围为authors{2}
举例:
<?php$xml=<<<XML<?xml version="1.0"?><moldb><molecule> <name>Alanine</name> <symbol>ala</symbol> <code>A</code> <type>hydrophobic</type> </molecule><molecule> <name>Lysine</name> <symbol>lys</symbol> <code>K</code> <type>charged</type> </molecule></moldb>XML;$parse = xml_parser_create();xml_parser_set_option($parse, XML_OPTION_CASE_FOLDING, 1);xml_parser_set_option($parse, XML_OPTION_SKIP_WHITE, 1);$val = array();$index = array();xml_parse_into_struct($parse, $xml, $val, $index);echo "<pre>";print_r($val);echo "<br />";print_r($index);echo "</pre>";?>
Array( [0] => Array ( [tag] => MOLDB [type] => open [level] => 1 ) [1] => Array ( [tag] => MOLECULE [type] => open [level] => 2 ) [2] => Array ( [tag] => NAME [type] => complete [level] => 3 [value] => Alanine ) [3] => Array ( [tag] => SYMBOL [type] => complete [level] => 3 [value] => ala ) [4] => Array ( [tag] => CODE [type] => complete [level] => 3 [value] => A ) [5] => Array ( [tag] => TYPE [type] => complete [level] => 3 [value] => hydrophobic ) [6] => Array ( [tag] => MOLECULE [type] => close [level] => 2 ) [7] => Array ( [tag] => MOLECULE [type] => open [level] => 2 ) [8] => Array ( [tag] => NAME [type] => complete [level] => 3 [value] => Lysine ) [9] => Array ( [tag] => SYMBOL [type] => complete [level] => 3 [value] => lys ) [10] => Array ( [tag] => CODE [type] => complete [level] => 3 [value] => K ) [11] => Array ( [tag] => TYPE [type] => complete [level] => 3 [value] => charged ) [12] => Array ( [tag] => MOLECULE [type] => close [level] => 2 ) [13] => Array ( [tag] => MOLDB [type] => close [level] => 1 ))Array( [MOLDB] => Array ( [0] => 0 [1] => 13 ) [MOLECULE] => Array ( [0] => 1 [1] => 6 [2] => 7 [3] => 12 ) [NAME] => Array ( [0] => 2 [1] => 8 ) [SYMBOL] => Array ( [0] => 3 [1] => 9 ) [CODE] => Array ( [0] => 4 [1] => 10 ) [TYPE] => Array ( [0] => 5 [1] => 11 ))
下面对$index索引数组做进一步分析,比如在上面的例子中(<--此处表示的是注释,用语解释说明,表示在解析数组中,他们所处的位置。 同样我们需要获取他们的值得时候,就根据这个索引来取值-->):
<moldb><--0--><molecule><--1--> <name>Alanine</name><--2--> <symbol>ala</symbol><--3--> <code>A</code><--4--> <type>hydrophobic</type><--5--> </molecule><--6--><molecule><--7--> <name>Lysine</name><--8--> <symbol>lys</symbol><--9--> <code>K</code><--10--> <type>charged</type><--11--> </molecule><--12--></moldb><--13-->
比如上例XML中有2个molecule元素,第一个为molecule{1,6},第2个为molecule{7,12}。 同样有两个name元素,第一个为name{2},第2个为name{8},以此类推。
- PHP xml_parse_into_struct 函数详细解析
- php header函数的详细解析
- php header函数的详细解析
- php header函数的详细解析(转)
- php加密解密函数authcode的用法详细解析
- php加密解密函数authcode的用法详细解析
- php加密解密函数authcode的用法详细解析
- xml_parse_into_struct 出错
- 虚函数详细解析
- AcceptEx()函数详细解析
- php解析xml详细介绍
- php配置文件php.ini的详细解析
- time函数的详细解析
- select函数详细用法解析
- select函数详细用法解析
- select函数详细用法解析
- select函数详细用法解析
- php 函数call_user_func解析
- vim学习记录
- python抓取数据步骤
- CodeSign error: code signing is required for product type 'Application' in SDK 'iOS 5.0'
- c++Primer学习笔记之五:变量和基本类型_1
- 乐蛙Lewa OS5卡刷后卡在开机动画进不了桌面的原因
- PHP xml_parse_into_struct 函数详细解析
- python 执行报错 SyntaxError: Non-ASCII character '\xef' i
- 集团信息化之路—人力资源管理软件选型二三事
- 根据Email地址跳转到相应的邮箱登录页面
- linux基础---常用命令学习
- Java中关于String类型的10个问题
- 【线段树】模板-HDU-1166-点改区查
- GPU编程之CUDA(六)——问题及解决
- LeetCode: Palindrome Partitioning