Aktueller Standort: Startseite> Neueste Artikel> Wie unterscheidet und extrahiert die Funktion xml_parse_into_struct XML -Tags aus ihren Attributinformationen?

Wie unterscheidet und extrahiert die Funktion xml_parse_into_struct XML -Tags aus ihren Attributinformationen?

M66 2025-06-12

In PHP ist eine der häufigsten Möglichkeiten, mit XML umzugehen, die Funktion xml_parse_into_struct () . Diese Funktion kann XML -Dokumente in ein strukturiertes Array analysieren, das nicht nur die hierarchische Beziehung des Tags enthält, sondern auch Tag -Attribute, Werte und Typen extrahiert. In diesem Artikel wird erläutert, wie XML -Tags aus ihren Attributinformationen durch diese Funktion unterschieden und extrahiert werden und sie mit Beispielen veranschaulichen.

Funktionsprototyp

 int xml_parse_into_struct(
    XMLParser $parser,
    string $data,
    array &$values,
    array &$index = null
);
  • $ Parser : XML Parser Resource.

  • $ Daten : XML -Daten zu analysieren.

  • $ Werte : Das strukturierte Ausgangsarray.

  • $ INDEX : Optionales Array für die Indizierungsbezeichnungen.

Wie extrahiere ich Etiketten- und Attributinformationen?

Der Schlüssel zu xml_parse_into_struct () ist, dass es alle Tags, Textknoten, CDATA und andere Informationen in das $ valuer -Array in der Reihenfolge schreibt. Jeder Artikel im Array ist ein assoziatives Array, und die Hauptfelder umfassen:

  • Tag : Tag -Name.

  • Typ : Knotentyp (z. B. Öffnen , Schließen , Vervollständigung , CDATA usw.).

  • Wert : Der vom Tag enthaltene Textwert (falls vorhanden).

  • Attribute : Das Attribut des Tags existiert als assoziatives Array (falls es ein Attribut gibt).

Beispiel: Parsing XML enthalten Attribute

Angenommen, wir haben das folgende XML:

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

Wir können den folgenden PHP -Code zum Parsen verwenden:

 <?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 "
"; ?>

Der Inhalt von $ Werten nach der Parsen ist ungefähr wie folgt:

 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
        )
)

Analyseanweisungen

  • Jedes Buch -Tag enthält Elemente geöffnet und geschlossen .

  • Die Attributinformationen sind in der Attributenschlüssel enthalten und existieren in Form eines assoziativen Arrays.

  • Textwerte (z. B. der Buchtitel) im Wertetaste und der Tag -Typ ist abgeschlossen .

  • Tagennamen werden immer aktiviert, was das Standardverhalten von XML_PARSE_INTO_STRUCT () ist.

Attributinformationen extrahieren

Sie können alle Tags mit Attributen extrahieren, indem Sie das Array $ values ​​Array iteriert. Zum Beispiel:

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

Dinge zu beachten

  • Tag -Namen und Attributnamen werden automatisch in Großbuchstaben konvertiert.

  • Diese Funktion behält nicht die hierarchischen Strukturinformationen der Tags bei, sondern ist nur in der Reihenfolge des Auftretens angeordnet.

  • Geeignet für einfache XML, wenn eine komplexere strukturelle Verarbeitung erforderlich ist, wird DOM oder Simplexml empfohlen.

Zusammenfassung