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.
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.
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).
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
)
)
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.
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";
}
}
}
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.