ホームページ  >  記事  >  バックエンド開発  >  PHP xml_parse_into_struct 関数の詳細な分析

PHP xml_parse_into_struct 関数の詳細な分析

WBOY
WBOYオリジナル
2016-06-23 13:50:391057ブラウズ

関数プロトタイプ: 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. タグ名 (例: XML ソースを解析、タグ名は次のようになります: bookname

2. タグのステータス (またはタイプ)、XML ソースを解析< /bookname>、パーサーが を読み取るとき、ラベルのタイプは次のようになります: open (開いた状態)、パーサーが を読み取るとき、ラベルのタイプは次のようになります: close (閉じた状態) )

3. XML 解析番号のレベルは、parse xmlsources< /bookname> のように、次の場所にある現在の要素です (XML は通常、ルート (最上位の要素) を最初のレベルとする逆ツリーとして解析されます)。 aaaa、bbbb、book タグでマークされた要素は解析番号の最初のレベル、つまりレベルは 1 にあり、書籍名とauthors タグは両方とも分析数値の第 2 レベル、つまりレベル 2

4 にあります。 parse xmlsourcesaaaa, bbbb の例では、bookname タグでマークされた値は文字列「parse xmlsources」です。の場合、authors タグでマークされた値は文字列「aaaa,bbbb」です。 book タグでマークされた要素には直接の文字ノードがないため、値は空 (または NULL) です

@param-->&$index 解析後に生成される配列 $value 内の要素の値に対応するインデックス配列0からカウントが完了します。たとえば、XML ソースの解析aaaa, bbbb では、 で表される実際のタグは 0 にあります。インデックス配列 parse xmlsources で表されるノードの位置はインデックス配列内で 1 であり、aaaa、bbbb で表されるノードの位置はインデックス配列内で で表される終了タグの位置は 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><--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 つの分子要素があり、1 つ目は分子{1,6}、2 つ目は分子{7,12}です。 また、name 要素が 2 つあり、1 つ目は name{2}、2 つ目は name{8} などとなります。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。