-
- $simple = "簡単なメモ";
- $p = xml_parser_create();
- xml_parse_into_struct($p, $ simple, $vals, $index);
- xml_parser_free($p);
- echo "Index arrayn";
- print_r($index);
- echo "nVals arrayn";
- print_r($vals);
- ?>
-
复制代
出出:
-
-
$xml = '
- note1extra1< /para>
- note2
- note3extra3
- ';
$p = xml_parser_create();
- xml_parse_into_struct($p, $xml, $values, $tags);
- xml_parser_free($p);
- $result = array();
- //下に遍在する方法でバグ隐患
- for ($i=0; $i $result[$i] = array();
- $result[ $i]["note"] = $values[$tags["NOTE"][$i]]["value"];
- $result[$i]["extra"] = $values[$tags[" EXTRA"][$i]]["value"];
- }
- print_r($result);
- ?>
-
复正代
要是按照上面那种方式遍历,会テストの結果が得られました (余分な 3 番目から 2 番目のパラレルまで)。
-
-
- $result = array();
- $paraTagIndexes = $tags['PARA'];
- $paraCount = count($paraTagIndexes);
- for($i = 0; $i < $paraCount; $i += 2) {
- $para = array();
- //遍历para标签对之间のすべて
- for($j = $paraTagIndexes[$i]; $j < $paraTagIndexes[$i+1]; $j++) {
- $value = $values[$j]['value'];
- if(empty($value)) 続行;
$tagname = strto lower($values[$j]['tag']);
- if(in_array($tagname, array('note','extra'))) {
- $para[$tagname] = $value;
- }
- }
- $result[] = $para;
- }
- ?>
-
-
-
复制發
其实,平時很少用xml_parse_into_struct関数数,所以上面所谓“严「谨」の代価保護には、他の状況でもバグが存在する可能性があります。
xml_set_element_handler
この方法は、パーサーが処理要素の開始と終了を設定するためのリミット関数です。
プラグインの xml_set_character_data_handler も、パーサー設定データの再調整関数として使用されます。
この方法で書き込まれたコードはより鮮明であり、保存されます。
例子:
$xml = <<- note1extra1< ;/extra>
- note2
- note3extra3
- XML;
$result = array();
- $index = -1;
- $currData;
- < ;p>function charactor($parser, $data) {
- global $currData;
- $currData = $data;
- }
function startElement($parser, $name, $attribs) {
- グローバル $result, $index;
- $name = strto lower($name);
- if($name == 'para') {
- $index++;
- $result[$index] = array();
- }
- }
function endElement($parser, $name) {
- global $result, $index, $currData;
- $name = strto lower($name);
- if($name == 'note ' || $name == 'extra') {
- $result[$index][$name] = $currData;
- }
- }
$xml_parser = xml_parser_create();
- xml_set_character_data_handler ($xml_parser, "charactor");
- xml_set_element_handler($xml_parser, "startElement", "endElement");
- if (!xml_parse($xml_parser, $xml)) {
- echo "xml 解析時のエラー: ";
- echo xml_error_string(xml_get_error_code($xml_parser));
- }
- xml_parser_free($xml_parser);
print_r($result);
- ?>
-
-
-
- 复制發
set ハンドラー メソッドはコード行数が多いものの、アイデアが明確で読みやすさが優れていますが、最初のメソッドよりもパフォーマンスがわずかに遅く、柔軟性が低いことがわかります。 XML パーサーは PHP4 をサポートしており、古いバージョンを使用するシステムに適しています。 PHP5環境の場合は以下の方法を優先してください。
2、単純なXML
SimpleXML は、PHP5 以降で提供されるシンプルで使いやすい XML ツールのセットで、XML を処理に便利なオブジェクトに変換したり、XML データを整理して生成したりすることができます。ただし、名前空間を含む XML には適用されず、XML は整形式である必要があります。これは、simplexml_import_dom、simplexml_load_file、simplexml_load_string の 3 つのメソッドを提供します。関数名は関数を直感的に説明します。 3 つの関数はすべて SimpleXMLElement オブジェクトを返し、データは SimpleXMLElement 操作を通じて読み取り/追加されます。
-
-
$string = <<
- <ドキュメント>
- ログイン< ;/cmd>
- imdonkey
- XML;
$xml = simplexml_load_string($string);
- print_r($xml);
- $login = $xml->login;//ここで返されるものはやはり SimpleXMLElement オブジェクトです
- print_r($login);
- $login = (string) $xml->login;//データ比較を行うとき、支払いを行います最初の強制変換に注意してください
- print_r($login);
- ?>
-
コードをコピー
SimpleXML の利点は開発が簡単であることですが、欠点はロードがかかることです。したがって、大量のコンテンツを含む XML ドキュメントを解析するのは困難な場合があります。小さなファイルを読み取っていて、XML に名前空間が含まれていない場合は、SimpleXML が適切な選択です。
3、XMLリーダー
XMLReader も PHP5 以降の拡張機能です (5.1 以降はデフォルトでインストールされます)。カーソルのようにドキュメント フロー内を移動し、各ノードで停止します。非常に柔軟な操作が可能です。入力への高速かつ非キャッシュのストリーミング アクセスを提供し、ストリームまたはドキュメントを読み取ることができるため、ユーザーはそこからデータを抽出し、アプリケーションにとって意味のないレコードをスキップできます。 1 2 次のページ 最後のページ
|