Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar xml ke array dalam php

Bagaimana untuk menukar xml ke array dalam php

PHPz
PHPzasal
2023-04-26 18:00:06671semak imbas

Apabila membangunkan aplikasi web, selalunya perlu mendapatkan data XML daripada sumber luaran dan memprosesnya. Banyak kali, kita perlu menukar data XML ini kepada tatasusunan PHP untuk memudahkan menambah, mengubah suai, memadam atau mengakses data.

Dalam PHP, kami boleh menggunakan perpustakaan fungsi SimpleXML untuk menghuraikan dan memanipulasi fail XML, dan kami juga boleh menggunakan pustaka fungsi DOM untuk menyelesaikan tugas yang sama. Walau bagaimanapun, artikel ini akan memberi tumpuan kepada cara menggunakan perpustakaan SimpleXML untuk menukar fail XML kepada tatasusunan PHP.

  1. Memuatkan fail XML

Sebelum menukar fail XML kepada tatasusunan PHP, kami perlu memuatkan fail XML terlebih dahulu. Ini boleh dilakukan melalui pembina kelas SimpleXMLElement seperti berikut:

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

Di sini, parameter pertama ialah laluan ke fail XML, parameter kedua menentukan pilihan fail XML dan yang ketiga parameter Menunjukkan sama ada untuk mendayakan sokongan ruang nama.

  1. Tukar XML kepada Tatasusunan

Setelah kami memuatkan fail XML, kami boleh menukarnya kepada tatasusunan PHP menggunakan kaedah yang disediakan oleh perpustakaan SimpleXML. Pertama, kita perlu mencipta tatasusunan kosong untuk menyimpan data XML. Kemudian, kita boleh menggunakan kaedah children() kelas SimpleXMLElement untuk mendapatkan semua nod anak nod semasa, seperti yang ditunjukkan di bawah:

$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;
        }
    }
}

Di sini, kami menggunakan gelung foreach untuk melintasi semua kanak-kanak nod dan dapatkan nama dan atribut. Untuk nod tanpa nod anak, kami akan menyimpan kandungannya sebagai nilai tatasusunan, dan namanya ialah nama nod untuk nod dengan nod anak, fungsi xml2array() dipanggil secara rekursif untuk menukar nod anaknya kepada tatasusunan, dan kemudian Tatasusunan ini digabungkan ke dalam tatasusunan nod semasa.

  1. Mengatur tatasusunan

Selepas menukar data XML kepada tatasusunan PHP, tatasusunan output mungkin memerlukan pemprosesan selanjutnya untuk memenuhi keperluan kita dengan lebih baik. Sebagai contoh, kita mungkin perlu menyimpan semua sifat dalam tatasusunan berasingan atau menukar struktur tatasusunan agar lebih sepadan dengan keperluan aplikasi. Berikut ialah beberapa operasi mengemas biasa yang mungkin anda ingin lakukan:

  • Simpan semua sifat dalam tatasusunan berasingan:
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;
}
  • Tukar struktur tatasusunan kepada Padanan yang lebih baik keperluan aplikasi:
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;
}

Di sini, apabila bekerja dengan nod, kami mencipta tatasusunan baharu yang mengandungi empat elemen berikut: nama, nilai, atribut dan nod anak. Ini membolehkan tatasusunan output dipetakan dengan mudah ke dalam jadual pangkalan data, atribut kelas atau struktur data lain.

Ringkasan

Menukar fail XML kepada tatasusunan PHP dalam PHP boleh dicapai melalui perpustakaan fungsi SimpleXML. Anda boleh menggunakan kaedah children() kelas SimpleXMLElement untuk melintasi pepohon XML dan menyimpan data menggunakan tatasusunan PHP. Setelah ditukar kepada tatasusunan PHP, data boleh diproses selanjutnya untuk akses dan manipulasi yang mudah.

Di atas ialah perkara yang diperkenalkan oleh artikel ini, saya harap ia dapat membantu anda dalam menggunakan PHP untuk memproses fail XML dalam pembangunan web.

Atas ialah kandungan terperinci Bagaimana untuk menukar xml ke array dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn