PHP xml_parse_into_struct 函数详细解析

WBOY
Release: 2016-06-23 13:50:39
Original
1061 people have browsed it

函数原型: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. 标签名字,例如parse xml sources,则标签名字为:bookname

    2. 标签所处状态(或者说是类型),parse xml sources,当解析器读取到,则标签类型为:open(开启状态),当解析器读取到时,则标签类型为:close(闭合状态)

  3. 当前元素所处XML解析数的第几层(XML通常被解析为一颗倒置树,根(顶层元素)处于第一层 )比如  parse xml sourcesaaaa, bbbb中,book标签所标记的元素处于解析数的第一层,即level为1, bookname和authors标签所标记的元素都处于解析数的第二层,即level为2

4. 可选的值。在例子parse xml sourcesaaaa, bbbb中,bookname标签所标记的取值为字符串 " parse xml sources" ,authors标签所标记的取值为字符串" aaaa,bbbb" 。 而book标签所标记的元素没有直接的字符结点所以取值为空(或者NULL)

@param-->&$index  解析完成后生成的对应数组$value中元素取值的索引数组,从 0 开始统计。比如在 parse xml sourcesaaaa, bbbb中,所代表的其实标签处于索引数组中的0位置,parse xml sources所代表的结点处于索引数组中的位置为1, aaaa, bbbb所代表的结点在索引数组中的位置为2,所代表的闭合标签所处的位置则为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 class="brush:php;toolbar:false">";print_r($val);echo "<br>";print_r($index);echo "
Copy after login
";?>


解析结果
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        ))
Copy after login

下面对$index索引数组做进一步分析,比如在上面的例子中():


<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>
Copy after login

比如上例XML中有2个molecule元素,第一个为molecule{1,6},第2个为molecule{7,12}。 同样有两个name元素,第一个为name{2},第2个为name{8},以此类推。

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template