現在の位置: ホーム> 最新記事一覧> XML_PARSEを介してCDATAを含むXMLドキュメントを解析する方法

XML_PARSEを介してCDATAを含むXMLドキュメントを解析する方法

M66 2025-05-13

PHPでXMLを処理する多くの方法があります。その中には、 XML_Parseは、XML構造のコントロールニーズが強い開発者に適した根本的な機能です。この記事では、 XML_PARSE関数を使用してCDATA領域を含むXMLドキュメントを解析する方法について説明します。

CDATAエリアとは何ですか?

xmlでは、 <![cdata [...]]>は、その中の内容をXML構文として解析してはならないことをパーサーに伝えるために使用される指令です。これは、HTMLやスクリプトコードなどの特殊文字を含むコンテンツに非常に便利です。

例:

 <note>
  <to>Tom</to>
  <message><![CDATA[Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!]]></message>
</note>

XML_PARSEを使用してXMLを解析するための基本的な手順

XML_PARSEは、XMLラインごとに解析するためのPHPの関数です。それを使用してCDATA領域を解析するには、通常、 xml_parser_create()とカスタムプロセッサ機能を使用する必要があります。

1.パーサーを作成します

$parser = xml_parser_create();

2.処理機能を設定します

スタートタグ、エンドタグ、および文字データプロセッサの3つのプロセッサ関数を登録する必要があります。

 $data = [];

function startElement($parser, $name, $attrs) {
    global $data;
    $data['current'] = $name;
}

function endElement($parser, $name) {
    global $data;
    $data['current'] = null;
}

function characterData($parser, $value) {
    global $data;
    if (!isset($data['values'][$data['current']])) {
        $data['values'][$data['current']] = '';
    }
    $data['values'][$data['current']] .= $value;
}

xml_set_element_handler($parser, "startElement", "endElement");
xml_set_character_data_handler($parser, "characterData");

3。XMLデータの解析

$xml = <<<XML
<note>
  <to>Tom</to>
  <message><![CDATA[Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!]]></message>
</note>
XML;

if (!xml_parse($parser, $xml, true)) {
    die(sprintf("XML Error: %s at line %d",
        xml_error_string(xml_get_error_code($parser)),
        xml_get_current_line_number($parser)));
}
xml_parser_free($parser);

4。出力結果

print_r($data['values']);

出力は次のとおりです。

 Array
(
    [TO] => Tom
    [MESSAGE] => Hello <b>Tom</b>, welcome to <a href="https://m66.net">our site</a>!
)

注:すべてのタグ名は大文字に変換されます。

まとめ

XML_PARSEは、複雑なまたは大容量XMLデータの処理に適したイベント駆動型XML解析方法です。 CDATAが含まれている場合は、その内容を正常にキャプチャするためにCharacherDataプロセッサをセットアップするだけです。 DOMやSimplexMLよりも使用する方が複雑ですが、パフォーマンスと柔軟性にはいくつかの利点があります。

プロジェクトが高い解析効率を必要とする場合、またはXMLのイベントの処理をカスタマイズする必要がある場合、 XML_PARSEが適しています。