現在の位置: ホーム> 最新記事一覧> xml_parseとxml_parser_createと組み合わせてカスタムパーサーを作成する方法

xml_parseとxml_parser_createと組み合わせてカスタムパーサーを作成する方法

M66 2025-05-12

PHPでは、XMLデータの処理は一般的なタスクの1つです。 PHPは、XMLを処理するさまざまな方法を提供します。その中には、 XML_PARSEXML_PARSER_CREATEが2つの一般的に使用される関数です。これらの関数は、イベント駆動型の解析方法を提供するため、大量のXMLデータを処理する際にパフォーマンスと効率をより適切に保証できます。

この記事では、 XML_PARSEXML_PARSER_CREATEを使用してカスタムXMLパーサーを作成し、解析中に遭遇したXMLデータを正しく処理する方法について説明します。

1. XML_PARSEXML_PARSER_CREATEとは何ですか?

  • XML_PARSER_CREATE :この関数は、XMLパーサーを作成し、パーサーリソースを返すために使用されます。このパーサーを通じて、PHPはXML構造に従ってファイルまたは文字列のデータを徐々に解析できます。

  • XML_PARSE :この関数は、 XML_PARSER_CREATEによって作成されたパーサーを処理し、XMLデータを解析するために使用されます。 XMLコンテンツを段階的に解析し、関連するイベントをトリガーできます(たとえば、タグが開始、終了、またはテキストノードが発生したとき)。

文法:

 xml_parser_create([encoding]);
xml_parse(parser, data[, terminate]);
  • XML_PARSER_CREATEパーサーを作成するときは、エンコード( UTF-8ISO-8859-1など)を指定することを選択できます。

  • XML_PARSEはデータを解析するために使用されます。解析するたびに、XMLデータブロックを処理し、コールバック関数を介して処理します。

2。カスタムXMLパーサーを作成します

PHPでは、 XML_PARSER_CREATEを使用してカスタムパーサーを作成し、異なるコールバック関数を設定することにより、解析プロセス中にさまざまなイベントを処理できます。たとえば、スタートタグ、エンドタグ、テキストコンテンツなどを処理するコールバック関数を設定できます。

サンプルコード:

 <?php
// カスタムコールバック関数
function startElementHandler($parser, $name, $attrs) {
    echo "タグを開始します: $name\n";
    // ラベルのプロパティを印刷します
    if (!empty($attrs)) {
        echo "タグプロパティ: " . print_r($attrs, true) . "\n";
    }
}

function endElementHandler($parser, $name) {
    echo "タグを終了します: $name\n";
}

function characterDataHandler($parser, $data) {
    echo "テキストデータ: $data\n";
}

// 作成する XML パーサー
$parser = xml_parser_create('UTF-8');

// コールバック関数を設定します
xml_set_element_handler($parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($parser, "characterDataHandler");

// 例 XML データ
$xml_data = '<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
    <book>
        <title lang="en">PHP for Beginners</title>
        <author>John Doe</author>
        <price>29.95</price>
    </book>
    <book>
        <title lang="es">PHP para Principiantes</title>
        <author>Juan Pérez</author>
        <price>25.95</price>
    </book>
</bookstore>';

// 分析 XML データ
if (!xml_parse($parser, $xml_data)) {
    echo "XML 分析错误: " . xml_error_string(xml_get_error_code($parser)) . "\n";
} else {
    echo "XML データ分析成功\n";
}

// 释放パーサー资源
xml_parser_free($parser);
?>

分析:

  • xml_set_element_handler Startタグとエンドタグのコールバック関数、つまりstartelementhandlerendelementhandlerをそれぞれ設定します。

  • XML_SET_CHARACTER_DATA_HANDLERテキストデータを処理するコールバック関数CharacherDatahandlerを設定します。

  • XMLデータを解析すると、解析中にコールバック関数がトリガーされ、さまざまなXMLイベントが処理されます。

出力:

 タグを開始します: bookstore
タグを開始します: book
タグを開始します: title
タグプロパティ: Array
(
    [lang] => en
)
テキストデータ: PHP for Beginners
タグを終了します: title
タグを開始します: author
テキストデータ: John Doe
タグを終了します: author
タグを開始します: price
テキストデータ: 29.95
タグを終了します: price
タグを終了します: book
タグを開始します: book
タグを開始します: title
タグプロパティ: Array
(
    [lang] => es
)
テキストデータ: PHP para Principiantes
タグを終了します: title
タグを開始します: author
テキストデータ: Juan Pérez
タグを終了します: author
タグを開始します: price
テキストデータ: 25.95
タグを終了します: price
タグを終了します: book
タグを終了します: bookstore
XML データ分析成功

3.プロセスURLデータ

XMLデータを処理する場合、URLを含むデータを解析する必要がある場合があります。解析中、次のようなXMLデータに遭遇する可能性があります。

 <links>
    <link>http://m66.net/page1</link>
    <link>http://m66.net/page2</link>
</links>

解析中にこれらのURLを取得して処理する場合は、カスタムコールバック関数を介してこれらのリンクを抽出および操作できます。

修正されたサンプルコード:

 <?php
// カスタムコールバック関数
function startElementHandler($parser, $name, $attrs) {
    echo "タグを開始します: $name\n";
}

function endElementHandler($parser, $name) {
    echo "タグを終了します: $name\n";
}

function characterDataHandler($parser, $data) {
    // あるかどうかを確認してください URL
    if (filter_var($data, FILTER_VALIDATE_URL)) {
        echo "効果的 URL: $data\n";
    } else {
        echo "テキストデータ: $data\n";
    }
}

// 作成する XML パーサー
$parser = xml_parser_create('UTF-8');

// コールバック関数を設定します
xml_set_element_handler($parser, "startElementHandler", "endElementHandler");
xml_set_character_data_handler($parser, "characterDataHandler");

// 例 XML データ
$xml_data = '<?xml version="1.0" encoding="UTF-8"?>
<links>
    <link>http://m66.net/page1</link>
    <link>http://m66.net/page2</link>
</links>';

// 分析 XML データ
if (!xml_parse($parser, $xml_data)) {
    echo "XML 分析错误: " . xml_error_string(xml_get_error_code($parser)) . "\n";
} else {
    echo "XML データ分析成功\n";
}

// 释放パーサー资源
xml_parser_free($parser);
?>

出力:

 タグを開始します: links
タグを開始します: link
効果的 URL: http://m66.net/page1
タグを終了します: link
タグを開始します: link
効果的 URL: http://m66.net/page2
タグを終了します: link
タグを終了します: links
XML データ分析成功

4。概要

XML_PARSER_CREATEおよびXML_PARSEを使用すると、XMLデータを非常に柔軟に解析し、コールバック関数をカスタマイズして、解析中にさまざまなイベントを処理できます。これらの機能を組み合わせることで、URL、タグ属性、テキストデータなど、実際のニーズに応じてXMLのさまざまなデータを処理できます。

カスタムコールバック関数を使用することにより、さまざまなXML要素とテキストを処理でき、解析プロセスをより操作可能で柔軟にすることができます。このイベント駆動型の解析方法は、大規模なXMLデータの処理が必要なアプリケーションシナリオに特に適しています。

このチュートリアルが、PHPでXML_PARSEXML_PARSER_CREATEを使用してカスタムXMLパーサーを作成し、XMLデータをプロセスする方法をよりよく理解するのに役立つことを願っています。