ホームページ > バックエンド開発 > PHPチュートリアル > PHP が XML ファイルを解析するための 4 つの方法の例

PHP が XML ファイルを解析するための 4 つの方法の例

WBOY
リリース: 2016-07-25 08:59:10
オリジナル
920 人が閲覧しました
  1. $simple = "簡単なメモ";
  2. $p = xml_parser_create();
  3. xml_parse_into_struct($p, $ simple, $vals, $index);
  4. xml_parser_free($p);
  5. echo "Index arrayn";
  6. print_r($index);
  7. echo "nVals arrayn";
  8. print_r($vals);
  9. ?>
复制代

出出:

  1. $xml = '

  2. note1extra1< /para>
  3. note2
  4. note3extra3
  5. ';

  6. $p = xml_parser_create();

  7. xml_parse_into_struct($p, $xml, $values, $tags);
  8. xml_parser_free($p);
  9. $result = array();
  10. //下に遍在する方法でバグ隐患
  11. for ($i=0; $i $result[$i] = array();
  12. $result[ $i]["note"] = $values[$tags["NOTE"][$i]]["value"];
  13. $result[$i]["extra"] = $values[$tags[" EXTRA"][$i]]["value"];
  14. }
  15. print_r($result);
  16. ?>

复正代

要是按照上面那种方式遍历,会テストの結果が得られました (余分な 3 番目から 2 番目のパラレルまで)。

  1. $result = array();
  2. $paraTagIndexes = $tags['PARA'];
  3. $paraCount = count($paraTagIndexes);
  4. for($i = 0; $i < $paraCount; $i += 2) {
  5. $para = array();
  6. //遍历para标签对之间のすべて
  7. for($j = $paraTagIndexes[$i]; $j < $paraTagIndexes[$i+1]; $j++) {
  8. $value = $values[$j]['value'];
  9. if(empty($value)) 続行;

    $tagname = strto lower($values[$j]['tag']);

  10. if(in_array($tagname, array('note','extra'))) {
  11. $para[$tagname] = $value;
  12. }
  13. }
  14. $result[] = $para;
  15. }
  16. ?>
复制發
其实,平時很少用xml_parse_into_struct関数数,所以上面所谓“严「谨」の代価保護には、他の状況でもバグが存在する可能性があります。

xml_set_element_handler

この方法は、パーサーが処理要素の開始と終了を設定するためのリミット関数です。 プラグインの xml_set_character_data_handler も、パーサー設定データの再調整関数として使用されます。 この方法で書き込まれたコードはより鮮明であり、保存されます。 例子:

    $xml = <<

  1. note1extra1< ;/extra>
  2. note2
  3. note3extra3
  4. XML;

  5. $result = array();

  6. $index = -1;
  7. $currData;

  8. < ;p>function charactor($parser, $data) {
  9. global $currData;
  10. $currData = $data;
  11. }

  12. function startElement($parser, $name, $attribs) {

  13. グローバル $result, $index;
  14. $name = strto lower($name);
  15. if($name == 'para') {
  16. $index++;
  17. $result[$index] = array();
  18. }
  19. }

  20. function endElement($parser, $name) {

  21. global $result, $index, $currData;
  22. $name = strto lower($name);
  23. if($name == 'note ' || $name == 'extra') {
  24. $result[$index][$name] = $currData;
  25. }
  26. }

  27. $xml_parser = xml_parser_create();

  28. xml_set_character_data_handler ($xml_parser, "charactor");
  29. xml_set_element_handler($xml_parser, "startElement", "endElement");
  30. if (!xml_parse($xml_parser, $xml)) {
  31. echo "xml 解析時のエラー: ";
  32. echo xml_error_string(xml_get_error_code($xml_parser));
  33. }
  34. xml_parser_free($xml_parser);

  35. print_r($result);

  36. ?>

  37. 复制發

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 操作を通じて読み取り/追加されます。

  1. $string = <<

  2. <ドキュメント>
  3. ログイン< ;/cmd>
  4. imdonkey
  5. XML;

  6. $xml = simplexml_load_string($string);

  7. print_r($xml);
  8. $login = $xml->login;//ここで返されるものはやはり SimpleXMLElement オブジェクトです
  9. print_r($login);
  10. $login = (string) $xml->login;//データ比較を行うとき、支払いを行います最初の強制変換に注意してください
  11. print_r($login);
  12. ?>

コードをコピー

SimpleXML の利点は開発が簡単であることですが、欠点はロードがかかることです。したがって、大量のコンテンツを含む XML ドキュメントを解析するのは困難な場合があります。小さなファイルを読み取っていて、XML に名前空間が含まれていない場合は、SimpleXML が適切な選択です。

3、XMLリーダー XMLReader も PHP5 以降の拡張機能です (5.1 以降はデフォルトでインストールされます)。カーソルのようにドキュメント フロー内を移動し、各ノードで停止します。非常に柔軟な操作が可能です。入力への高速かつ非キャッシュのストリーミング アクセスを提供し、ストリームまたはドキュメントを読み取ることができるため、ユーザーはそこからデータを抽出し、アプリケーションにとって意味のないレコードをスキップできます。 1 2 次のページ 最後のページ



ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート