Rumah pembangunan bahagian belakang tutorial php 将xml文件转换成以为数组

将xml文件转换成以为数组

Dec 01, 2016 am 11:21 AM
xml

<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
class XmlToArray {
    function __construct() {
        
    }
    function xml2array($contents, $get_attributes=1, $priority = &#39;tag&#39;) {
        if (!$contents)
            return array();
        if (!function_exists(&#39;xml_parser_create&#39;)) {
            //print "&#39;xml_parser_create()&#39; function not found!";
            return array();
        }
        //Get the XML parser of PHP - PHP must have this module for the parser to work
        $parser = xml_parser_create(&#39;&#39;);
        xml_parser_set_option($parser, XML_OPTION_TARGET_ENCODING, "UTF-8"); # http://minutillo.com/steve/weblog/2004/6/17/php-xml-and-character-encodings-a-tale-of-sadness-rage-and-data-loss
        xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
        xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
        xml_parse_into_struct($parser, trim($contents), $xml_values);
        xml_parser_free($parser);
        if (!$xml_values)
            return; //Hmm...
            
//Initializations
        $xml_array = array();
        $parents = array();
        $opened_tags = array();
        $arr = array();
        $current = &$xml_array; //Refference
        //Go through the tags.
        $repeated_tag_index = array(); //Multiple tags with same name will be turned into an array
        foreach ($xml_values as $data) {
            unset($attributes, $value); //Remove existing values, or there will be trouble
            //This command will extract these variables into the foreach scope
            // tag(string), type(string), level(int), attributes(array).
            extract($data); //We could use the array by itself, but this cooler.
            $result = array();
            $attributes_data = array();
            if (isset($value)) {
                if ($priority == &#39;tag&#39;)
                    $result = $value;
                else
                    $result[&#39;value&#39;] = $value; //Put the value in a assoc array if we are in the &#39;Attribute&#39; mode
            }
            //Set the attributes too.
            if (isset($attributes) and $get_attributes) {
                foreach ($attributes as $attr => $val) {
                    if ($priority == &#39;tag&#39;)
                        $attributes_data[$attr] = $val;
                    else
                        $result[&#39;attr&#39;][$attr] = $val; //Set all the attributes in a array called &#39;attr&#39;
                }
            }
            //See tag status and do the needed.
            if ($type == "open") {//The starting of the tag &#39;<tag>&#39;
                $parent[$level - 1] = &$current;
                if (!is_array($current) or (!in_array($tag, array_keys($current)))) { //Insert New tag
                    $current[$tag] = $result;
                    if ($attributes_data)
                        $current[$tag . &#39;_attr&#39;] = $attributes_data;
                    $repeated_tag_index[$tag . &#39;_&#39; . $level] = 1;
                    $current = &$current[$tag];
                } else { //There was another element with the same tag name
                    if (isset($current[$tag][0])) {//If there is a 0th element it is already an array
                        $current[$tag][$repeated_tag_index[$tag . &#39;_&#39; . $level]] = $result;
                        $repeated_tag_index[$tag . &#39;_&#39; . $level]++;
                    } else {//This section will make the value an array if multiple tags with the same name appear together
                        $current[$tag] = array($current[$tag], $result); //This will combine the existing item and the new item together to make an array
                        $repeated_tag_index[$tag . &#39;_&#39; . $level] = 2;
                        if (isset($current[$tag . &#39;_attr&#39;])) { //The attribute of the last(0th) tag must be moved as well
                            $current[$tag][&#39;0_attr&#39;] = $current[$tag . &#39;_attr&#39;];
                            unset($current[$tag . &#39;_attr&#39;]);
                        }
                    }
                    $last_item_index = $repeated_tag_index[$tag . &#39;_&#39; . $level] - 1;
                    $current = &$current[$tag][$last_item_index];
                }
            } elseif ($type == "complete") { //Tags that ends in 1 line &#39;<tag />&#39;
                //See if the key is already taken.
                if (!isset($current[$tag])) { //New Key
                    $current[$tag] = $result;
                    $repeated_tag_index[$tag . &#39;_&#39; . $level] = 1;
                    if ($priority == &#39;tag&#39; and $attributes_data)
                        $current[$tag . &#39;_attr&#39;] = $attributes_data;
                } else { //If taken, put all things inside a list(array)
                    if (isset($current[$tag][0]) and is_array($current[$tag])) {//If it is already an array...
                        // ...push the new element into that array.
                        $current[$tag][$repeated_tag_index[$tag . &#39;_&#39; . $level]] = $result;
                        if ($priority == &#39;tag&#39; and $get_attributes and $attributes_data) {
                            $current[$tag][$repeated_tag_index[$tag . &#39;_&#39; . $level] . &#39;_attr&#39;] = $attributes_data;
                        }
                        $repeated_tag_index[$tag . &#39;_&#39; . $level]++;
                    } else { //If it is not an array...
                        $current[$tag] = array($current[$tag], $result); //...Make it an array using using the existing value and the new value
                        $repeated_tag_index[$tag . &#39;_&#39; . $level] = 1;
                        if ($priority == &#39;tag&#39; and $get_attributes) {
                            if (isset($current[$tag . &#39;_attr&#39;])) { //The attribute of the last(0th) tag must be moved as well
                                $current[$tag][&#39;0_attr&#39;] = $current[$tag . &#39;_attr&#39;];
                                unset($current[$tag . &#39;_attr&#39;]);
                            }
                            if ($attributes_data) {
                                $current[$tag][$repeated_tag_index[$tag . &#39;_&#39; . $level] . &#39;_attr&#39;] = $attributes_data;
                            }
                        }
                        $repeated_tag_index[$tag . &#39;_&#39; . $level]++; //0 and 1 index is already taken
                    }
                }
            } elseif ($type == &#39;close&#39;) { //End of tag &#39;</tag>&#39;
                $current = &$parent[$level - 1];
            }
        }
        return $xml_array;
    }
}
?>
Salin selepas log masuk


<?php
/**
 *用递归法将返回的多维数组存进一维数组
 */
    function datatosession($array) {
        foreach ($array as $key => $value) {
            if (is_array($value) && $value != null) {
                $this->datatosession($value);
            } else {
                if (is_string($value)) {
                    $_SESSION["$key"] = $value;
                }
            }
        }
    }
 
?>
Salin selepas log masuk


Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bolehkah saya membuka fail XML menggunakan PowerPoint? Bolehkah saya membuka fail XML menggunakan PowerPoint? Feb 19, 2024 pm 09:06 PM

Bolehkah fail XML dibuka dengan PPT? XML, Extensible Markup Language (Extensible Markup Language), ialah bahasa markup universal yang digunakan secara meluas dalam pertukaran data dan penyimpanan data. Berbanding dengan HTML, XML lebih fleksibel dan boleh menentukan tag dan struktur datanya sendiri, menjadikan penyimpanan dan pertukaran data lebih mudah dan bersatu. PPT, atau PowerPoint, ialah perisian yang dibangunkan oleh Microsoft untuk membuat pembentangan. Ia menyediakan cara yang komprehensif untuk

Menggunakan Python untuk menggabungkan dan menyahduplikasi data XML Menggunakan Python untuk menggabungkan dan menyahduplikasi data XML Aug 07, 2023 am 11:33 AM

Menggunakan Python untuk menggabungkan dan menyahduplikasi data XML XML (eXtensibleMarkupLanguage) ialah bahasa penanda yang digunakan untuk menyimpan dan menghantar data. Apabila memproses data XML, kadangkala kita perlu menggabungkan berbilang fail XML menjadi satu, atau mengalih keluar data pendua. Artikel ini akan memperkenalkan cara menggunakan Python untuk melaksanakan penggabungan dan penyahduplikasian data XML, dan memberikan contoh kod yang sepadan. 1. Penggabungan data XML Apabila kita mempunyai berbilang fail XML, kita perlu menggabungkannya

Menapis dan menyusun data XML menggunakan Python Menapis dan menyusun data XML menggunakan Python Aug 07, 2023 pm 04:17 PM

Melaksanakan penapisan dan pengisihan data XML menggunakan Python Pengenalan: XML ialah format pertukaran data yang biasa digunakan yang menyimpan data dalam bentuk teg dan atribut. Apabila memproses data XML, kami selalunya perlu menapis dan mengisih data. Python menyediakan banyak alat dan perpustakaan yang berguna untuk memproses data XML. Artikel ini akan memperkenalkan cara menggunakan Python untuk menapis dan mengisih data XML. Membaca fail XML Sebelum kita mula, kita perlu membaca fail XML. Python mempunyai banyak perpustakaan pemprosesan XML,

Tukar data XML kepada format CSV dalam Python Tukar data XML kepada format CSV dalam Python Aug 11, 2023 pm 07:41 PM

Tukar data XML dalam Python kepada format CSV XML (ExtensibleMarkupLanguage) ialah bahasa penanda boleh diperluas yang biasa digunakan untuk penyimpanan dan penghantaran data. CSV (CommaSeparatedValues) ialah format fail teks dipisahkan koma yang biasa digunakan untuk import dan eksport data. Semasa memproses data, kadangkala data XML perlu ditukar kepada format CSV untuk analisis dan pemprosesan yang mudah. Python adalah yang kuat

Import data XML ke dalam pangkalan data menggunakan PHP Import data XML ke dalam pangkalan data menggunakan PHP Aug 07, 2023 am 09:58 AM

Mengimport data XML ke dalam pangkalan data menggunakan PHP Pengenalan: Semasa pembangunan, kita sering perlu mengimport data luaran ke dalam pangkalan data untuk pemprosesan dan analisis selanjutnya. Sebagai format pertukaran data yang biasa digunakan, XML sering digunakan untuk menyimpan dan menghantar data berstruktur. Artikel ini akan memperkenalkan cara menggunakan PHP untuk mengimport data XML ke dalam pangkalan data. Langkah 1: Menghuraikan fail XML Mula-mula, kita perlu menghuraikan fail XML dan mengekstrak data yang diperlukan. PHP menyediakan beberapa cara untuk menghuraikan XML, yang paling biasa digunakan ialah menggunakan Mudah

Python melaksanakan penukaran antara XML dan JSON Python melaksanakan penukaran antara XML dan JSON Aug 07, 2023 pm 07:10 PM

Python melaksanakan penukaran antara XML dan JSON Pengenalan: Dalam proses pembangunan harian, kita selalunya perlu menukar data antara format yang berbeza. XML dan JSON ialah format pertukaran data biasa Dalam Python, kita boleh menggunakan pelbagai perpustakaan untuk menukar antara XML dan JSON. Artikel ini akan memperkenalkan beberapa kaedah yang biasa digunakan, dengan contoh kod. 1. Untuk menukar XML kepada JSON dalam Python, kita boleh menggunakan modul xml.etree.ElementTree

Mengendalikan ralat dan pengecualian dalam XML menggunakan Python Mengendalikan ralat dan pengecualian dalam XML menggunakan Python Aug 08, 2023 pm 12:25 PM

Mengendalikan Ralat dan Pengecualian dalam XML Menggunakan Python XML ialah format data yang biasa digunakan untuk menyimpan dan mewakili data berstruktur. Apabila kami menggunakan Python untuk memproses XML, kadangkala kami mungkin menghadapi beberapa ralat dan pengecualian. Dalam artikel ini, saya akan memperkenalkan cara menggunakan Python untuk mengendalikan ralat dan pengecualian dalam XML, dan menyediakan beberapa kod sampel untuk rujukan. Gunakan pernyataan cuba-kecuali untuk menangkap ralat penghuraian XML Apabila kami menggunakan Python untuk menghuraikan XML, kadangkala kami mungkin menghadapi beberapa

Python menghuraikan aksara khas dan urutan melarikan diri dalam XML Python menghuraikan aksara khas dan urutan melarikan diri dalam XML Aug 08, 2023 pm 12:46 PM

Python menghuraikan aksara khas dan jujukan melarikan diri dalam XML XML (eXtensibleMarkupLanguage) ialah format pertukaran data yang biasa digunakan untuk memindahkan dan menyimpan data antara sistem yang berbeza. Semasa memproses fail XML, anda sering menghadapi situasi yang mengandungi aksara khas dan urutan melarikan diri, yang boleh menyebabkan ralat penghuraian atau salah tafsiran data. Oleh itu, apabila menghuraikan fail XML menggunakan Python, kita perlu memahami cara mengendalikan aksara khas dan urutan melarikan diri ini. 1. Watak istimewa dan

See all articles