Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie XML in ein Array in PHP

So konvertieren Sie XML in ein Array in PHP

PHPz
PHPzOriginal
2023-04-26 18:00:06671Durchsuche

Bei der Entwicklung von Webanwendungen ist es häufig notwendig, XML-Daten aus externen Quellen zu beziehen und zu verarbeiten. Oft müssen wir diese XML-Daten in PHP-Arrays konvertieren, um das Hinzufügen, Ändern, Löschen oder Zugreifen auf die Daten zu erleichtern.

In PHP können wir die SimpleXML-Funktionsbibliothek verwenden, um XML-Dateien zu analysieren und zu bearbeiten, und wir können auch die DOM-Funktionsbibliothek verwenden, um dieselbe Aufgabe zu erfüllen. Dieser Artikel konzentriert sich jedoch auf die Verwendung der SimpleXML-Bibliothek zum Konvertieren einer XML-Datei in ein PHP-Array.

  1. XML-Datei laden

Bevor wir die XML-Datei in ein PHP-Array konvertieren, müssen wir zuerst die XML-Datei laden. Dies kann über den Konstruktor der SimpleXMLElement-Klasse erfolgen, wie unten gezeigt:

$xml = new SimpleXMLElement('filename.xml', null, true);

Hier ist der erste Parameter der Pfad zur XML-Datei, der zweite Parameter gibt die Optionen für die XML-Datei an und der dritte Parameter gibt an, ob dies der Fall ist Aktivieren Sie die Namespace-Unterstützung.

  1. XML in Array konvertieren

Sobald wir die XML-Datei geladen haben, können wir sie mithilfe der von der SimpleXML-Bibliothek bereitgestellten Methoden in ein PHP-Array konvertieren. Zuerst müssen wir ein leeres Array erstellen, um die XML-Daten zu speichern. Anschließend können wir alle untergeordneten Knoten des aktuellen Knotens mithilfe der Methode „children()“ der SimpleXMLElement-Klasse abrufen, wie unten gezeigt:

$array = array();
foreach ($xml->children() as $element) {
    $name = $element->getName();
    $attributes = $element->attributes();
    if (!$attributes) {
        if (!isset($array[$name])) {
            $array[$name] = (string) $element;
        } else {
            if (!is_array($array[$name])) {
                $array[$name] = array($array[$name]);
            }
            $array[$name][] = (string) $element;
        }
    } else {
        $array[$name][] = array();
        foreach ($attributes as $attrName => $attrValue) {
            $array[$name][count($array[$name])-1]['_'.$attrName] = (string) $attrValue;
        }
        if ($element->children()) {
            $array[$name][count($array[$name])-1] = array_merge($array[$name][count($array[$name])-1],$this->xml2array($element));
        } else {
            $array[$name][count($array[$name])-1]['value'] = (string) $element;
        }
    }
}

Hier verwenden wir eine foreach-Schleife, um alle untergeordneten Knoten zu durchlaufen und deren Namen und Attribute abzurufen jeder untergeordnete Knoten. Für Knoten ohne untergeordnete Knoten speichern wir ihren Inhalt als Wert des Arrays, und sein Name ist der Knotenname. Bei Knoten mit untergeordneten Knoten wird die Funktion xml2array() rekursiv aufgerufen, um ihre untergeordneten Knoten in Arrays umzuwandeln Diese Arrays werden mit dem Array des aktuellen Knotens zusammengeführt.

  1. Arrays organisieren

Nach der Konvertierung von XML-Daten in PHP-Arrays muss das Ausgabearray möglicherweise weiter verarbeitet werden, um unseren Anforderungen besser gerecht zu werden. Beispielsweise müssen wir möglicherweise alle Eigenschaften in separaten Arrays speichern oder die Array-Struktur ändern, um sie besser an die Anforderungen der Anwendung anzupassen. Hier sind einige häufige Aufräumvorgänge, die Sie möglicherweise durchführen möchten:

  • Speichern Sie alle Eigenschaften in separaten Arrays:
function xml2array($xml) {
    $array = array();
    foreach ($xml->children() as $element) {
        $name = $element->getName();
        $attributes = $element->attributes();
        if (!$attributes) {
            if (!isset($array[$name])) {
                $array[$name] = (string) $element;
            } else {
                if (!is_array($array[$name])) {
                    $array[$name] = array($array[$name]);
                }
                $array[$name][] = (string) $element;
            }
        } else {
            $array[$name][] = array('_attributes' => array());
            foreach ($attributes as $attrName => $attrValue) {
                $array[$name][count($array[$name])-1]['_attributes'][$attrName] = (string) $attrValue;
            }
            if ($element->children()) {
                $array[$name][count($array[$name])-1] = array_merge($array[$name][count($array[$name])-1],$this->xml2array($element));
            } else {
                $array[$name][count($array[$name])-1]['value'] = (string) $element;
            }
        }
    }
    return $array;
}
  • Ändern Sie die Array-Struktur, um sie besser an die Anforderungen Ihrer Anwendung anzupassen:
function xml2array($xml) {
    $array = array();
    foreach ($xml->children() as $element) {
        $name = $element->getName();
        $attributes = $element->attributes();
        if (!$attributes) {
            if (!isset($array[$name])) {
                $array[$name] = (string) $element;
            } else {
                if (!is_array($array[$name])) {
                    $array[$name] = array($array[$name]);
                }
                $array[$name][] = (string) $element;
            }
        } else {
            $node = array(
                '_name' => $name,
                '_value' => (count($element->children()) == 0) ? (string) $element : null,
                '_attributes' => array(),
                '_children' => array()
            );
            foreach ($attributes as $attrName => $attrValue) {
                $node['_attributes'][$attrName] = (string) $attrValue;
            }
            foreach ($element->children() as $childElement) {
                $childNode = $this->xml2array($childElement);
                $childName = $childElement->getName();
                if (count($childNode) == 1) {
                    $node['_children'][$childName] = reset($childNode);
                } else {
                    $node['_children'][$childName][] = $childNode;
                }
            }
            if (!isset($array[$name])) {
                $array[$name] = $node;
            } else {
                if (!is_array($array[$name])) {
                    $array[$name] = array($array[$name]);
                }
                $array[$name][] = $node;
            }
        }
    }
    return $array;
}

Hier sehen wir bei der Verarbeitung von a Knoten wird ein neues Array erstellt, das die folgenden vier Elemente enthält: Name, Wert, Attribut und untergeordneter Knoten. Dadurch kann das Ausgabearray problemlos einer Datenbanktabelle, einem Klassenattribut oder einer anderen Datenstruktur zugeordnet werden.

Zusammenfassung

Die Konvertierung von XML-Dateien in PHP-Arrays in PHP kann über die SimpleXML-Funktionsbibliothek erreicht werden. Sie können die Methode children() der Klasse SimpleXMLElement verwenden, um den XML-Baum zu durchlaufen und die Daten mithilfe eines PHP-Arrays zu speichern. Nach der Konvertierung in ein PHP-Array können die Daten für einen einfachen Zugriff und eine einfache Bearbeitung weiterverarbeitet werden.

Das Obige wird in diesem Artikel vorgestellt. Ich hoffe, dass er Ihnen bei der Verwendung von PHP zur Verarbeitung von XML-Dateien in der Webentwicklung hilfreich sein kann.

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie XML in ein Array in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn