首頁  >  文章  >  後端開發  >  PHP如何將XML轉為數組

PHP如何將XML轉為數組

PHPz
PHPz原創
2023-04-20 15:05:401399瀏覽

在Web開發中,XML被廣泛使用作為資料傳輸和儲存格式。當我們需要使用XML格式資料時,我們通常需要將XML字串轉換為陣列或對象,以方便後續的操作。在PHP中,可以很方便地實作將XML字串轉換為陣列操作。本篇文章將介紹PHP如何將XML轉換為陣列。

一、XML格式介紹

XML是一種標記語言,主要用於資料傳輸與儲存。 XML包含了一些元素(Element)和屬性(Attribute)。 Element通常用標籤(Tag)表示,如:

<book>
  <title>PHP从入门到精通</title>
  <price>50</price>
</book>

這個XML文字定義了一個book元素,其中包含了title和price子元素。

Attribute是為元素添加額外資訊的方式,如:

<book category="Programming">
  <title>PHP从入门到精通</title>
  <price>50</price>
</book>

在這個例子中,我們為book元素設定了category屬性,值為"Programming"。

二、PHP中將XML轉為陣列

PHP提供了許多用於處理XML的函數,其中比較常用的函數是simplexml_load_string()和xml_parse_into_struct()。下面我們分別介紹這兩個函數的用法。

  1. simplexml_load_string()

simplexml_load_string()函數可以從一個XML字串中建立一個SimpleXMLElement對象,透過這個物件可以方便地存取XML中的元素和屬性,也可以將SimpleXMLElement物件轉換為陣列或其他類型的資料。以下是使用simplexml_load_string()函數將XML轉換為陣列的範例:

$xml = '<bookstore>
            <book category="Programming">
                <title>PHP从入门到精通</title>
                <author>张三</author>
                <price>50</price>
            </book>
            <book category="Web Development">
                <title>JavaScript高级编程</title>
                <author>李四</author>
                <price>45</price>
            </book>
        </bookstore>';
        
$data = json_decode(json_encode(simplexml_load_string($xml)), true);
print_r($data);

執行以上程式碼,輸出結果如下:

Array
(
    [book] => Array
        (
            [0] => Array
                (
                    [@attributes] => Array
                        (
                            [category] => Programming
                        )
                    [title] => PHP从入门到精通
                    [author] => 张三
                    [price] => 50
                )
            [1] => Array
                (
                    [@attributes] => Array
                        (
                            [category] => Web Development
                        )
                    [title] => JavaScript高级编程
                    [author] => 李四
                    [price] => 45
                )
        )
)

可以看到,simplexml_load_string()函數將XML轉換為一個由多個數組所構成的關係數組。

  1. xml_parse_into_struct()

xml_parse_into_struct ()函數將XML字串解析為一個陣列。以下是使用xml_parse_into_struct()函數將XML轉換為陣列的範例:

$xml = '<bookstore>
            <book category="Programming">
                <title>PHP从入门到精通</title>
                <author>张三</author>
                <price>50</price>
            </book>
            <book category="Web Development">
                <title>JavaScript高级编程</title>
                <author>李四</author>
                <price>45</price>
            </book>
        </bookstore>';

$p = xml_parser_create();
xml_parse_into_struct($p, $xml, $vals);
xml_parser_free($p);

print_r($vals);

執行以上程式碼,輸出結果如下:

Array
(
    [0] => Array
        (
            [tag] => BOOKSTORE
            [type] => open
            [level] => 1
        )

    [1] => Array
        (
            [tag] => BOOK
            [type] => open
            [level] => 2
            [attributes] => Array
                (
                    [CATEGORY] => Programming
                )
        )

    [2] => Array
        (
            [tag] => TITLE
            [type] => open
            [level] => 3
        )

    [3] => Array
        (
            [tag] => TITLE
            [type] => close
            [level] => 3
            [value] => PHP从入门到精通
        )

    [4] => Array
        (
            [tag] => AUTHOR
            [type] => open
            [level] => 3
        )

    [5] => Array
        (
            [tag] => AUTHOR
            [type] => close
            [level] => 3
            [value] => 张三
        )

    [6] => Array
        (
            [tag] => PRICE
            [type] => open
            [level] => 3
        )

    [7] => Array
        (
            [tag] => PRICE
            [type] => close
            [level] => 3
            [value] => 50
        )

    [8] => Array
        (
            [tag] => BOOK
            [type] => close
            [level] => 2
        )

    [9] => Array
        (
            [tag] => BOOK
            [type] => open
            [level] => 2
            [attributes] => Array
                (
                    [CATEGORY] => Web Development
                )
        )

    [10] => Array
        (
            [tag] => TITLE
            [type] => open
            [level] => 3
        )

    [11] => Array
        (
            [tag] => TITLE
            [type] => close
            [level] => 3
            [value] => JavaScript高级编程
        )

    [12] => Array
        (
            [tag] => AUTHOR
            [type] => open
            [level] => 3
        )

    [13] => Array
        (
            [tag] => AUTHOR
            [type] => close
            [level] => 3
            [value] => 李四
        )

    [14] => Array
        (
            [tag] => PRICE
            [type] => open
            [level] => 3
        )

    [15] => Array
        (
            [tag] => PRICE
            [type] => close
            [level] => 3
            [value] => 45
        )

    [16] => Array
        (
            [tag] => BOOK
            [type] => close
            [level] => 2
        )

    [17] => Array
        (
            [tag] => BOOKSTORE
            [type] => close
            [level] => 1
        )
)

可以看到,xml_parse_into_struct()函數將XML解析成了一個由多個數組構成的關係數組,其中每個數組表示了XML中的一個元素或屬性。

三、使用DOMDocument擴充進行轉換

在PHP還有一種使用DOMDocument擴充來解析XML的方法。 DOMDocument是PHP自帶的擴展,功能十分強大。以下是使用DOMDocument轉換XML資料的範例:

$xml = '<bookstore>
            <book category="Programming">
                <title>PHP从入门到精通</title>
                <author>张三</author>
                <price>50</price>
            </book>
            <book category="Web Development">
                <title>JavaScript高级编程</title>
                <author>李四</author>
                <price>45</price>
            </book>
        </bookstore>';

$dom = new DOMDocument;
$dom->loadXML($xml);
$data = array();
foreach ($dom->getElementsByTagName('book') as $book) {
    $data[] = array(
        'category' => $book->getAttribute('category'),
        'title' => $book->getElementsByTagName('title')->item(0)->textContent,
        'author' => $book->getElementsByTagName('author')->item(0)->textContent,
        'price' => $book->getElementsByTagName('price')->item(0)->textContent,
    );
}
print_r($data);

執行以上程式碼,輸出結果如下:

Array
(
    [0] => Array
        (
            [category] => Programming
            [title] => PHP从入门到精通
            [author] => 张三
            [price] => 50
        )

    [1] => Array
        (
            [category] => Web Development
            [title] => JavaScript高级编程
            [author] => 李四
            [price] => 45
        )

)

可以看到,使用DOMDocument解析XML數據,我們可以方便地取得XML中的元素和屬性,進而轉換為陣列。

四、總結

以上就是PHP將XML轉換為陣列的幾種方法,分別是simplexml_load_string()函數、xml_parse_into_struct()函數和使用DOMDocument擴充。每個方法都有其適用的場景,根據實際需求選擇合適的方法。當然,無論使用何種方法,我們都需要注意XML的格式和規範,以確保資料的正確性和完整性。

以上是PHP如何將XML轉為數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn