1. 程式人生 > 其它 >PHP學習記錄12

PHP學習記錄12

主要 看XML和利用PHP操作XML

XML 簡介


XML 被設計用來傳輸和儲存資料。

HTML 被設計用來顯示資料。


什麼是 XML?

  • XML 指可擴充套件標記語言(EXtensible Markup Language)。
  • XML 是一種很像HTML的標記語言。
  • XML 的設計宗旨是傳輸資料,而不是顯示資料。
  • XML 標籤沒有被預定義。您需要自行定義標籤。
  • XML 被設計為具有自我描述性。
  • XML 是 W3C 的推薦標準。

XML 和 HTML 之間的差異

XML 不是 HTML 的替代。

XML 和 HTML 為不同的目的而設計:

  • XML 被設計用來傳輸和儲存資料,其焦點是資料的內容。
  • HTML 被設計用來顯示資料,其焦點是資料的外觀。

HTML 旨在顯示資訊,而 XML 旨在傳輸資訊。


XML 不會做任何事情

也許這有點難以理解,但是 XML 不會做任何事情。XML 被設計用來結構化、儲存以及傳輸資訊。

下面例項是 Jani 寫給 Tove 的便籤,儲存為 XML:

<note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>

上面的這條便籤具有自我描述性。它包含了傳送者和接受者的資訊,同時擁有標題以及訊息主體。

但是,這個 XML 文件仍然沒有做任何事情。它僅僅是包裝在 XML 標籤中的純粹的資訊。我們需要編寫軟體或者程式,才能傳送、接收和顯示出這個文件。


通過 XML 您可以發明自己的標籤

上面例項中的標籤沒有在任何 XML 標準中定義過(比如 <to> 和 <from>)。這些標籤是由 XML 文件的創作者發明的。

這是因為 XML 語言沒有預定義的標籤。

HTML 中使用的標籤都是預定義的。HTML 文件只能使用在 HTML 標準中定義過的標籤(如 <p>、<h1> 等等)。

XML 允許創作者定義自己的標籤和自己的文件結構。


XML 不是對 HTML 的替代

XML 是對 HTML 的補充。

XML 不會替代 HTML,理解這一點很重要。在大多數 Web 應用程式中,XML 用於傳輸資料,而 HTML 用於格式化並顯示資料。

對 XML 最好的描述是:

XML 是獨立於軟體和硬體的資訊傳輸工具。


XML 是 W3C 的推薦標準

XML 於 1998 年 2 月 10 日成為 W3C 的推薦標準。

如需瞭解有關 W3C XML 活動的更多資訊,請訪問我們的 W3C 教程


XML 無所不在

目前,XML 在 Web 中起到的作用不會亞於一直作為 Web 基石的 HTML。

XML 是各種應用程式之間進行資料傳輸的最常用的工具。



XML 用途


XML 應用於 Web 開發的許多方面,常用於簡化資料的儲存和共享。


XML 把資料從 HTML 分離

如果您需要在 HTML 文件中顯示動態資料,那麼每當資料改變時將花費大量的時間來編輯 HTML。

通過 XML,資料能夠儲存在獨立的 XML 檔案中。這樣您就可以專注於使用 HTML/CSS 進行顯示和佈局,並確保修改底層資料不再需要對 HTML 進行任何的改變。

通過使用幾行 JavaScript 程式碼,您就可以讀取一個外部 XML 檔案,並更新您的網頁的資料內容。


XML 簡化資料共享

在真實的世界中,計算機系統和資料使用不相容的格式來儲存資料。

XML 資料以純文字格式進行儲存,因此提供了一種獨立於軟體和硬體的資料儲存方法。

這讓建立不同應用程式可以共享的資料變得更加容易。


XML 簡化資料傳輸

對開發人員來說,其中一項最費時的挑戰一直是在網際網路上的不相容系統之間交換資料。

由於可以通過各種不相容的應用程式來讀取資料,以 XML 交換資料降低了這種複雜性。


XML 簡化平臺變更

升級到新的系統(硬體或軟體平臺),總是非常費時的。必須轉換大量的資料,不相容的資料經常會丟失。

XML 資料以文字格式儲存。這使得 XML 在不損失資料的情況下,更容易擴充套件或升級到新的作業系統、新的應用程式或新的瀏覽器。


XML 使您的資料更有用

不同的應用程式都能夠訪問您的資料,不僅僅在 HTML 頁中,也可以從 XML 資料來源中進行訪問。

通過 XML,您的資料可供各種閱讀裝置使用(掌上計算機、語音裝置、新聞閱讀器等),還可以供盲人或其他殘障人士使用。


XML 用於建立新的網際網路語言

很多新的網際網路語言是通過 XML 建立的。

這裡有一些例項:

  • XHTML
  • 用於描述可用的 Web 服務 的 WSDL
  • 作為手持裝置的標記語言的 WAP 和 WML
  • 用於新聞 feed 的 RSS 語言
  • 描述資本和本體的 RDF 和 OWL
  • 用於描述針針對 Web 的多媒體 的 SMIL


XML 樹結構


XML 文件形成了一種樹結構,它從"根部"開始,然後擴充套件到"枝葉"。


一個 XML 文件例項

XML 文件使用簡單的具有自我描述性的語法:

<?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>

第一行是 XML 宣告。它定義 XML 的版本(1.0)和所使用的編碼(UTF-8 : 萬國碼, 可顯示各種語言)。

下一行描述文件的根元素(像在說:"本文件是一個便籤"):

<note>

接下來 4 行描述根的 4 個子元素(to, from, heading 以及 body):

<to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body>

最後一行定義根元素的結尾:

</note>

您可以假設,從這個例項中,XML 文件包含了一張 Jani 寫給 Tove 的便籤。

XML 具有出色的自我描述性,您同意嗎?


XML 文件形成一種樹結構

XML 文件必須包含根元素。該元素是所有其他元素的父元素。

XML 文件中的元素形成了一棵文件樹。這棵樹從根部開始,並擴充套件到樹的最底端。

所有的元素都可以有子元素:

<root> <child> <subchild>.....</subchild> </child> </root>

父、子以及同胞等術語用於描述元素之間的關係。父元素擁有子元素。相同層級上的子元素成為同胞(兄弟或姐妹)。

所有的元素都可以有文字內容和屬性(類似 HTML 中)。



XML 語法規則


XML 的語法規則很簡單,且很有邏輯。這些規則很容易學習,也很容易使用。


XML 文件必須有根元素

XML 必須包含根元素,它是所有其他元素的父元素,比如以下例項中 root 就是根元素:

<root> <child> <subchild>.....</subchild> </child> </root>

以下例項中 note 是根元素:

<?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>

XML 宣告

XML 宣告檔案的可選部分,如果存在需要放在文件的第一行,如下所示:

<?xml version="1.0" encoding="utf-8"?>

以上例項包含 XML 版本(

UTF-8 也是 HTML5, CSS, JavaScript, PHP, 和 SQL 的預設編碼。


所有的 XML 元素都必須有一個關閉標籤

在 HTML 中,某些元素不必有一個關閉標籤:

<p>This is a paragraph.
<br>

在 XML 中,省略關閉標籤是非法的。所有元素都必須有關閉標籤:

<p>This is a paragraph.</p>
<br />

註釋:從上面的例項中,您也許已經注意到 XML 宣告沒有關閉標籤。這不是錯誤。宣告不是 XML 文件本身的一部分,它沒有關閉標籤。


XML 標籤對大小寫敏感

XML 標籤對大小寫敏感。標籤 <Letter> 與標籤 <letter> 是不同的。

必須使用相同的大小寫來編寫開啟標籤和關閉標籤:

<Message>這是錯誤的</message>
<message>這是正確的</message>

註釋:開啟標籤和關閉標籤通常被稱為開始標籤和結束標籤。不論您喜歡哪種術語,它們的概念都是相同的。


XML 必須正確巢狀

在 HTML 中,常會看到沒有正確巢狀的元素:

<b><i>This text is bold and italic</b></i>

在 XML 中,所有元素都必須彼此正確地巢狀:

<b><i>This text is bold and italic</i></b>

在上面的例項中,正確巢狀的意思是:由於 <i> 元素是在 <b> 元素內開啟的,那麼它必須在 <b> 元素內關閉。



XML 屬性值必須加引號

與 HTML 類似,XML 元素也可擁有屬性(名稱/值的對)。

在 XML 中,XML 的屬性值必須加引號。

請研究下面的兩個 XML 文件。 第一個是錯誤的,第二個是正確的:

<note date=12/11/2007>
<to>Tove</to>
<from>Jani</from>
</note>
<note date="12/11/2007">
<to>Tove</to>
<from>Jani</from>
</note>

在第一個文件中的錯誤是,note 元素中的 date 屬性沒有加引號。


實體引用

在 XML 中,一些字元擁有特殊的意義。

如果您把字元 "<" 放在 XML 元素中,會發生錯誤,這是因為解析器會把它當作新元素的開始。

這樣會產生 XML 錯誤:

<message>if salary < 1000 then</message>

為了避免這個錯誤,請用實體引用來代替 "<" 字元:

<message>if salary &lt; 1000 then</message>

在 XML 中,有 5 個預定義的實體引用:

&lt; < less than
&gt; > greater than
&amp; & ampersand
&apos; ' apostrophe
&quot; " quotation mark

註釋:在 XML 中,只有字元 "<" 和 "&" 確實是非法的。大於號是合法的,但是用實體引用來代替它是一個好習慣。


XML 中的註釋

在 XML 中編寫註釋的語法與 HTML 的語法很相似。

<!-- This is a comment -->

在 XML 中,空格會被保留

HTML 會把多個連續的空格字元裁減(合併)為一個:

HTML:
Hello           Tove
輸出結果: Hello Tove

在 XML 中,文件中的空格不會被刪減。


XML 以 LF 儲存換行

在 Windows 應用程式中,換行通常以一對字元來儲存:回車符(CR)和換行符(LF)。

在 Unix 和 Mac OSX 中,使用 LF 來儲存新行。

在舊的 Mac 系統中,使用 CR 來儲存新行。

XML 以 LF 儲存換行。

XML 命名規則

XML 元素必須遵循以下命名規則:

  • 名稱可以包含字母、數字以及其他的字元
  • 名稱不能以數字或者標點符號開始
  • 名稱不能以字母 xml(或者 XML、Xml 等等)開始
  • 名稱不能包含空格

可使用任何名稱,沒有保留的字詞。


XML 屬性


XML元素具有屬性,類似 HTML。

屬性(Attribute)提供有關元素的額外資訊。


XML 屬性

在 HTML 中,屬性提供有關元素的額外資訊:

<img src="computer.gif">
<a href="demo.html">

屬性通常提供不屬於資料組成部分的資訊。在下面的例項中,檔案型別與資料無關,但是對需要處理這個元素的軟體來說卻很重要:

<file type="gif">computer.gif</file>

XML 屬性必須加引號

屬性值必須被引號包圍,不過單引號和雙引號均可使用。比如一個人的性別,person 元素可以這樣寫:

<person sex="female">

或者這樣也可以:

<person sex='female'>

如果屬性值本身包含雙引號,您可以使用單引號,就像這個例項:

<gangster name='George "Shotgun" Ziegler'>

或者您可以使用字元實體:

<gangster name="George &quot;Shotgun&quot; Ziegler">

XML 元素 vs. 屬性

請看這些例項:

<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person> <person>
<sex>female</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>

在第一個例項中,sex 是一個屬性。在第二個例項中,sex 是一個元素。這兩個例項都提供相同的資訊。

沒有什麼規矩可以告訴我們什麼時候該使用屬性,而什麼時候該使用元素。我的經驗是在 HTML 中,屬性用起來很便利,但是在 XML 中,您應該儘量避免使用屬性。如果資訊感覺起來很像資料,那麼請使用元素吧。


我最喜歡的方式

下面的三個 XML 文件包含完全相同的資訊:

第一個例項中使用了 date 屬性:

<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第二個例項中使用了 date 元素:

<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

第三個例項中使用了擴充套件的 date 元素(這是我的最愛):

<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

避免 XML 屬性?

因使用屬性而引起的一些問題:

  • 屬性不能包含多個值(元素可以)
  • 屬性不能包含樹結構(元素可以)
  • 屬性不容易擴充套件(為未來的變化)

屬性難以閱讀和維護。請儘量使用元素來描述資料。而僅僅使用屬性來提供與資料無關的資訊。

不要做這樣的蠢事(這不是 XML 應該被使用的方式):

<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="Don't forget me this weekend!">
</note>

針對元資料的 XML 屬性

有時候會向元素分配 ID 引用。這些 ID 索引可用於標識 XML 元素,它起作用的方式與 HTML 中 id 屬性是一樣的。這個例項向我們演示了這種情況:

<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>Re: Reminder</heading>
<body>I will not</body>
</note>
</messages>

上面的 id 屬性僅僅是一個識別符號,用於標識不同的便籤。它並不是便籤資料的組成部分。

在此我們極力向您傳遞的理念是:元資料(有關資料的資料)應當儲存為屬性,而資料本身應當儲存為元素。


XML 驗證


擁有正確語法的 XML 被稱為"形式良好"的 XML。

通過 DTD 驗證的XML是"合法"的 XML。


形式良好的 XML 文件

"形式良好"的 XML 文件擁有正確的語法。

在前面的章節描述的語法規則:

  • XML 文件必須有一個根元素
  • XML元素都必須有一個關閉標籤
  • XML 標籤對大小寫敏感
  • XML 元素必須被正確的巢狀
  • XML 屬性值必須加引號
<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

驗證 XML 文件

合法的 XML 文件是"形式良好"的 XML 文件,這也符合文件型別定義(DTD)的規則:

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

在上面的例項中,DOCTYPE 宣告是對外部 DTD 檔案的引用。下面的段落展示了這個檔案的內容。


XML DTD

DTD 的目的是定義 XML 文件的結構。它使用一系列合法的元素來定義文件結構:

<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>

如果您想要學習 DTD,請在我們的首頁查詢 DTD 教程。


XML Schema

W3C 支援一種基於 XML 的 DTD 代替者,它名為 XML Schema:

<xs:element name="note">

<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>

</xs:element>

如果您想要學習 XML Schema,請在我們的首頁查詢 Schema 教程。


一個通用的 XML 驗證器

為了幫助您檢查 XML 檔案的語法,我們建立了 XML 驗證器,以便您對任何 XML 檔案進行語法檢查。

一個線上驗證器


PHP XML Expat 解析器


內建的 Expat 解析器使在 PHP 中處理 XML 文件成為可能。


XML 是什麼?

XML 用於描述資料,其焦點是資料是什麼。XML 檔案描述了資料的結構。

在 XML 中,沒有預定義的標籤。您必須定義自己的標籤。

如需學習更多關於 XML 的知識,請訪問我們的 XML 教程


Expat 是什麼?

如需讀取和更新 - 建立和處理 - 一個 XML 文件,您需要 XML 解析器。

有兩種基本的 XML 解析器型別:

  • 基於樹的解析器:這種解析器把 XML 文件轉換為樹型結構。它分析整篇文件,並提供了對樹中元素的訪問,例如文件物件模型 (DOM)。
  • 基於事件的解析器:將 XML 文件視為一系列的事件。當某個具體的事件發生時,解析器會呼叫函式來處理。

Expat 解析器是基於事件的解析器。

基於事件的解析器集中在 XML 文件的內容,而不是它們的結構。正因為如此,基於事件的解析器能夠比基於樹的解析器更快地訪問資料。

請看下面的 XML 片段:

<from>Jani</from>

基於事件的解析器把上面的 XML 報告為一連串的三個事件:

  • 開始元素:from
  • 開始 CDATA 部分,值:Jani
  • 關閉元素:from

上面的 XML 例項包含了形式良好的 XML。不過這個例項是無效的 XML,因為沒有與它關聯的文件型別宣告 (DTD)。

然而,在使用 Expat 解析器時,這沒有區別。Expat 是不檢查有效性的解析器,忽略任何 DTD。

作為一款基於事件、非驗證的 XML 解析器,Expat 快速且輕巧,十分適合 PHP 的 Web 應用程式。

註釋:XML 文件必須形式良好,否則 Expat 會生成錯誤。


安裝

XML Expat 解析器函式是 PHP 核心的組成部分。無需安裝就可以使用這些函式。


XML 檔案

下面的 XML 檔案將應用在我們的例項中:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

初始化 XML 解析器

我們要在 PHP 中初始化 XML 解析器,為不同的 XML 事件定義處理器,然後解析這個 XML 檔案。

例項

<?php
//Initialize the XML parser
$parser=xml_parser_create();

//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
{
switch($element_name)
{
case "NOTE":
echo "-- Note --<br>";
break;
case "TO":
echo "To: ";
break;
case "FROM":
echo "From: ";
break;
case "HEADING":
echo "Heading: ";
break;
case "BODY":
echo "Message: ";
}
}

//Function to use at the end of an element
function stop($parser,$element_name)
{
echo "<br>";
}

//Function to use when finding character data
function char($parser,$data)
{
echo $data;
}

//Specify element handler
xml_set_element_handler($parser,"start","stop");

//Specify data handler
xml_set_character_data_handler($parser,"char");

//Open XML file
$fp=fopen("test.xml","r");

//Read data
while ($data=fread($fp,4096))
{
xml_parse($parser,$data,feof($fp)) or
die (sprintf("XML Error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}

//Free the XML parser
xml_parser_free($parser);
?> 

以上程式碼將輸出:

-- Note --
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!

工作原理:

  1. 通過 xml_parser_create() 函式初始化 XML 解析器
  2. 建立配合不同事件處理程式的的函式
  3. 新增 xml_set_element_handler() 函式來定義,當解析器遇到開始和結束標籤時執行哪個函式
  4. 新增 xml_set_character_data_handler() 函式來定義,當解析器遇到字元資料時執行哪個函式
  5. 通過 xml_parse() 函式來解析檔案 "test.xml"
  6. 萬一有錯誤的話,新增 xml_error_string() 函式把 XML 錯誤轉換為文字說明
  7. 呼叫 xml_parser_free() 函式來釋放分配給 xml_parser_create() 函式的記憶體

PHP XML DOM


內建的 DOM 解析器使在 PHP 中處理 XML 文件成為可能。


DOM 是什麼?

W3C DOM 提供了針對 HTML 和 XML 文件的標準物件集,以及用於訪問和操作這些文件的標準介面。

W3C DOM 被分為不同的部分(Core, XML 和 HTML)和不同的級別(DOM Level 1/2/3):

  • Core DOM - 為任何結構化文件定義標準的物件集
  • XML DOM - 為 XML 文件定義標準的物件集
  • HTML DOM - 為 HTML 文件定義標準的物件集

如需學習更多關於 XML DOM 的知識,請訪問我們的 XML DOM 教程


XML 解析

如需讀取和更新 - 建立和處理 - 一個 XML 文件,您需要 XML 解析器。

有兩種基本的 XML 解析器型別:

  • 基於樹的解析器:這種解析器把 XML 文件轉換為樹型結構。它分析整篇文件,並提供了對樹中元素的訪問,例如文件物件模型 (DOM)。
  • 基於事件的解析器:將 XML 文件視為一系列的事件。當某個具體的事件發生時,解析器會呼叫函式來處理。

DOM 解析器是基於樹的解析器。

請看下面的 XML 文件片段:

<?xml version="1.0" encoding="ISO-8859-1"?>
<from>Jani</from>

XML DOM 把上面的 XML 視為一個樹形結構:

  • Level 1: XML 文件
  • Level 2: 根元素: <from>
  • Level 3: 文字元素: "Jani"

安裝

DOM XML 解析器函式是 PHP 核心的組成部分。無需安裝就可以使用這些函式。


XML 檔案

下面的 XML 檔案將應用在我們的例項中:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

載入和輸出 XML

我們需要初始化 XML 解析器,載入 XML,並把它輸出:

例項

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

print $xmlDoc->saveXML();
?>

以上程式碼將輸出:

ToveJaniReminder Don't forget me this weekend!

如果您在瀏覽器視窗中檢視原始碼,會看到下面的 HTML:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

上面的例項建立了一個 DOMDocument-Object,並把 "note.xml" 中的 XML 載入這個文件物件中。

saveXML() 函式把內部 XML 文件放入一個字串,這樣我們就可以輸出它。


遍歷 XML

我們要初始化 XML 解析器,載入 XML,並遍歷 <note> 元素的所有元素:

例項

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("note.xml");

$x = $xmlDoc->documentElement;
foreach ($x->childNodes AS $item)
{
print $item->nodeName . " = " . $item->nodeValue . "<br>";
}
?>

以上程式碼將輸出:

#text =
to = Tove
#text =
from = Jani
#text =
heading = Reminder
#text =
body = Don't forget me this weekend!
#text =

在上面的例項中,您看到了每個元素之間存在空的文字節點。

當 XML 生成時,它通常會在節點之間包含空白。XML DOM 解析器把它們當作普通的元素,如果您不注意它們,有時會產生問題。


PHP SimpleXML


PHP SimpleXML 處理最普通的 XML 任務,其餘的任務則交由其它擴充套件處理。


什麼是 PHP SimpleXML?

SimpleXML 是 PHP 5 中的新特性。

SimpleXML 擴充套件提供了一種獲取 XML 元素的名稱和文字的簡單方式。

與 DOM 或 Expat 解析器相比,SimpleXML 僅僅用幾行程式碼就可以從 XML 元素中讀取文字資料。

SimpleXML 可把 XML 文件(或 XML 字串)轉換為物件,比如:

  • 元素被轉換為 SimpleXMLElement 物件的單一屬性。當同一級別上存在多個元素時,它們會被置於陣列中。
  • 屬性通過使用關聯陣列進行訪問,其中的索引對應屬性名稱。
  • 元素內部的文字被轉換為字串。如果一個元素擁有多個文字節點,則按照它們被找到的順序進行排列。

當執行類似下列的基礎任務時,SimpleXML 使用起來非常快捷:

  • 讀取/提取 XML 檔案/字串的資料
  • 編輯文字節點或屬性

然而,在處理高階 XML 時,比如名稱空間,最好使用 Expat 解析器或 XML DOM。

PHP SimpleXML 例項

假設我們有如下的 XML 檔案,"note.xml":

<?xml version="1.0" encoding="ISO-8859-1"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note>

現在我們想要輸出上面的 XML 檔案的不同資訊:

例項 1

輸出 $xml 變數(是 SimpleXMLElement 物件)的鍵和元素:

<?php $xml=simplexml_load_file("note.xml"); print_r($xml); ?>
執行例項 »

以上程式碼將輸出:

SimpleXMLElement Object ( [to] => Tove [from] => Jani [heading] => Reminder [body] => Don't forget me this weekend! )

例項 2

輸出 XML 檔案中每個元素的資料:

<?php $xml=simplexml_load_file("note.xml"); echo $xml->to . "<br>"; echo $xml->from . "<br>"; echo $xml->heading . "<br>"; echo $xml->body; ?>
執行例項 »

以上程式碼將輸出:

Tove
Jani
Reminder
Don't forget me this weekend!

例項 3

輸出每個子節點的元素名稱和資料:

<?php $xml=simplexml_load_file("note.xml"); echo $xml->getName() . "<br>"; foreach($xml->children() as $child) { echo $child->getName() . ": " . $child . "<br>"; } ?>
執行例項 »

以上程式碼將輸出:

note
to: Tove
from: Jani
heading: Reminder
body: Don't forget me this weekend!