Heim  >  Artikel  >  Backend-Entwicklung  >  PHP xml_parse_into_struct 函数详细解析

PHP xml_parse_into_struct 函数详细解析

WBOY
WBOYOriginal
2016-06-23 13:50:391058Durchsuche

函数原型: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},以此类推。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn