Maison  >  Article  >  développement back-end  >  PHP xml_parse_into_struct 函数详细解析

PHP xml_parse_into_struct 函数详细解析

WBOY
WBOYoriginal
2016-06-23 13:50:391015parcourir

函数原型: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 "
";?>


解析结果
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>	<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中有2个molecule元素,第一个为molecule{1,6},第2个为molecule{7,12}。 同样有两个name元素,第一个为name{2},第2个为name{8},以此类推。

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn