現在の位置: ホーム> 最新記事一覧> XML_PARSE関数と正規表現と組み合わせてXMLデータのノイズ情報を効果的にクリーンアップするにはどうすればよいですか?

XML_PARSE関数と正規表現と組み合わせてXMLデータのノイズ情報を効果的にクリーンアップするにはどうすればよいですか?

M66 2025-04-26

XMLデータを処理するとき、多くの場合、「ノイズ情報」に遭遇します。これらは、CDATAにネストされた違法な文字、役に立たないタグ、コメント、または汚れたデータである可能性があります。データ解析の精度を確保するために、PHPのXML_PARSE関数と正規表現を使用してXMLコンテンツを事前に処理して、これらの干渉アイテムをクリアし、解析の効率とデータの信頼性を向上させることができます。

1. XML_PARSE関数を理解します

XML_PARSEは、PHPが提供する基礎となるXMLパーサーであり、Expat XMLパーサーに基づいています。セグメントごとにXML文字列セグメントを読み取り、コールバック関数を介してノードをプロセスできます。ただし、 XML_PARSEにはXML形式の要件が非常に高いです。 XMLに違法な文字またはフォーマットエラーがある場合、それは直接障害に戻ります。

例の使用法は次のとおりです。

 $xml_parser = xml_parser_create();

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

$xml_data = file_get_contents("https://m66.net/sample.xml");

if (!xml_parse($xml_parser, $xml_data, true)) {
    die("XML 分析に失敗しました: " . xml_error_string(xml_get_error_code($xml_parser)));
}

xml_parser_free($xml_parser);

function startElement($parser, $name, $attrs) {
    echo "要素を開始します: $name\n";
}

function endElement($parser, $name) {
    echo "終了要素: $name\n";
}

function characterData($parser, $data) {
    echo "データコンテンツ: $data\n";
}

このコードはリモートXMLを読み取り、コールバック関数を使用して各タグとデータノードを段階的に処理します。ただし、XMLにコントロール文字や不完全なCDATAノードなどの違法な文字が含まれている場合、解析障害が発生します。

2。正規表現を使用して、ノイズ情報をクリーンアップします

XML_PARSEが適切に機能するためには、解析する前にXMLのノイズ情報をクリーニングする必要があります。これは、正規表現で効率的に行うことができます。一般的な「ノイズ」は次のとおりです。

  • コントロール文字(ASCII 0-31など)

  • 違法なHTMLコメント( <!---->などのスクリプトなど)

  • ネストされた間違ったタグ

  • 余分な空白またはラインブレイク

いくつかの処理例を次に示します。

 function cleanXmlData($xml) {
    // 違法な制御文字を削除します
    $xml = preg_replace('/[^\x09\x0A\x0D\x20-\x7E\xA0-\xFF]/u', '', $xml);
    
    // コメントコンテンツを削除します
    $xml = preg_replace('/<!--.*?-->/s', '', $xml);

    // 無効な空のタグ形式を交換します
    $xml = preg_replace('/<(\w+)[^>]*>\s*<\/\1>/', '', $xml);

    // 掃除 CDATA スクリプトを非表示にするか、コンテンツを注入します
    $xml = preg_replace('/<!\[CDATA\[(.*?)\]\]>/s', function($matches) {
        $content = $matches[1];
        // 必要に応じてコンテンツをフィルタリングできます,たとえば、削除します <script>
        $content = preg_replace('/<script.*?>.*?<\/script>/is', '', $content);
        return "<![CDATA[$content]]>";
    }, $xml);

    return $xml;
}

3。クリーニングと分析を組み合わせて使用​​します

クリーンアップステップとXMLパーサーを統合します。

 $raw_xml = file_get_contents("https://m66.net/raw-feed.xml");

$clean_xml = cleanXmlData($raw_xml);

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

if (!xml_parse($parser, $clean_xml, true)) {
    die("掃除后 XML 分析に失敗しました: " . xml_error_string(xml_get_error_code($parser)));
}

xml_parser_free($parser);

このように、元のXMLファイルに騒々しい情報がある場合でも、クリーニング後に解析され、システムの安定性が向上する可能性があります。

4。概要

XML_PARSEと正規表現のクリーニング方法を組み合わせることで、XMLデータの処理における障害の許容度が大幅に向上する可能性があります。規則性は、弱く構造化された「汚れた」データを処理できますが、 XML_PARSEは適切に構造化されたXMLドキュメントを効率的に処理できます。 2つの組み合わせは、XMLに大きく依存するログ分析、データ収集、APIゲートウェイなどのシステムシナリオに適しています。

常に覚えておいてください:データの前処理は、解析を成功させるための最初のステップです。