現在の位置: ホーム> 最新記事一覧> XML_PARSE_INTO_STRUCT関数は、XMLタグを属性情報とどのように抽出しますか?

XML_PARSE_INTO_STRUCT関数は、XMLタグを属性情報とどのように抽出しますか?

M66 2025-06-12

PHPでは、XMLを処理する一般的な方法の1つは、XML_PARSE_INTO_STRUCT()関数を使用することです。この関数は、XMLドキュメントを構造化された配列に解析することができます。これには、タグの階層的関係が含まれるだけでなく、タグ属性、値、およびタイプも抽出できます。この記事では、この関数を通じてXMLタグを属性情報と区別および抽出する方法を説明し、例で説明します。

関数プロトタイプ

int xml_parse_into_struct(
    XMLParser $parser,
    string $data,
    array &$values,
    array &$index = null
);
  • $パーサー:XMLパーサーリソース。

  • $データ:解析するXMLデータ。

  • $値:出力の構造化された配列。

  • $ index :インデックス作成ラベルのオプション配列。

ラベル情報と属性情報を抽出する方法は?

XML_PARSE_INTO_STRUCT()のキーは、すべてのタグ、テキストノード、CDATA、その他の情報を$値配列に順番に書き込むことです。配列内の各アイテムは連想配列であり、メインフィールドには以下が含まれます。

  • タグ:タグ名。

  • タイプ:ノードタイプ(オープンクローズ完全CDATAなど)。

  • :タグに含まれるテキスト値(ある場合)。

  • 属性:タグの属性は、連想配列として存在します(属性がある場合)。

例:解析XMLを含む属性

次のXMLがあるとします。

 <books>
    <book id="1" category="fiction">
        <title>Book One</title>
    </book>
    <book id="2" category="non-fiction">
        <title>Book Two</title>
    </book>
</books>

解析には、次のPHPコードを使用できます。

 <?php
$xml = <<<XML
<books>
    <book id="1" category="fiction">
        <title>Book One</title>
    </book>
    <book id="2" category="non-fiction">
        <title>Book Two</title>
    </book>
</books>
XML;

$parser = xml_parser_create();
xml_parse_into_struct($parser, $xml, $values, $index);
xml_parser_free($parser);

echo "<pre>";
print_r($values);
echo "
"; ?>

解析後の$値のコンテンツは、ほぼ次のとおりです。

 Array
(
    [0] => Array
        (
            [tag] => BOOKS
            [type] => open
        )

    [1] => Array
        (
            [tag] => BOOK
            [type] => open
            [attributes] => Array
                (
                    [ID] => 1
                    [CATEGORY] => fiction
                )
        )

    [2] => Array
        (
            [tag] => TITLE
            [type] => complete
            [value] => Book One
        )

    [3] => Array
        (
            [tag] => BOOK
            [type] => close
        )

    [4] => Array
        (
            [tag] => BOOK
            [type] => open
            [attributes] => Array
                (
                    [ID] => 2
                    [CATEGORY] => non-fiction
                )
        )

    [5] => Array
        (
            [tag] => TITLE
            [type] => complete
            [value] => Book Two
        )

    [6] => Array
        (
            [tag] => BOOK
            [type] => close
        )

    [7] => Array
        (
            [tag] => BOOKS
            [type] => close
        )
)

分析手順

  • Bookタグには、オープンおよびクローズタイプのアイテムがあります。

  • 属性情報は属性キーに含まれ、連想配列の形で存在します。

  • テキスト値(本のタイトルなど)はキーに存在し、タグタイプが完了します

  • タグ名は常に大文字であり、これはXML_PARSE_INTO_STRUCT()のデフォルトの動作です。

属性情報を抽出します

$ valuesアレイを繰り返すことにより、すべてのタグを属性で抽出できます。例えば:

 foreach ($values as $entry) {
    if (isset($entry['attributes'])) {
        echo "Tag: {$entry['tag']}\n";
        foreach ($entry['attributes'] as $attrName => $attrValue) {
            echo "  $attrName => $attrValue\n";
        }
    }
}

注意すべきこと

  • タグ名と属性名は自動的に大文字に変換されます。

  • この関数は、タグの階層構造情報を保持するのではなく、発生順にのみ配置されます。

  • より複雑な構造処理が必要な場合は、単純なXMLに適しています。DOMまたはSimplexMLが推奨されます。

まとめ