伊莉討論區
標題:
由 DOM 建立基本 XML
[打印本頁]
作者:
tyty12369
時間:
2010-9-25 11:30 AM
標題:
由 DOM 建立基本 XML
本帖最後由 tyty12369 於 2010-9-25 11:32 AM 編輯
最近有接觸到在 PHP 網頁直譯式語言中建立、修改 xml 檔案,那麼就順便放上來當紀錄
目前練習的是用最基本的建立方式,利用 DOM(Document Object Model)裡的方法來產生架構。
關於 DOM 就不多做介紹,直接進入語法的部分。
首先必須先有 DOM 物件來實現之後要完成的功能,因此先使用 new 來宣告物件。
<?php
$dom = new DOMDocument();
?>
複製代碼
接著先了解在 DOMDocument 之下有哪些方法或參數,可以參考網路的 Reference -
PHP:DOMDocument
在開始建構你的 XML 檔案之前,必須先了解你需要建立哪些標籤,架構為何?
以最簡單的架構「個人資料」來建立的話,少不了的就是『姓名』『生日』『性別』... 等
因此我們先暫時規劃如下
<PROFILE>
<DATA>
<NAME></NAME>
<SEX></SEX>
<BIRTH></BIRTH>
<PHONE>
<HOME></HOME>
<CELL></CELL>
</PHONE>
<...></...>
<...></...>
</DATA>
</PROFILE>
複製代碼
首先看到最外層架構 <PROFILE> 的部分,對於 XML 格式來說,這些標籤(TAG)都屬於元素(ELEMENT),
因此在建立的時候,使用 createElement 函式來產生
DOMElement
DOMDocument::createElement
( string <tt>
$name
</tt> [, string <tt>
$value
</tt> ] )
回傳為 DOMElement 格式,代表的東西就是你的標籤,後面接的 value 可以直接定義包含的內容。
但目前我們算是在
巢狀
架構中的最外層,因此可以先不用預設值,等在內層後再加入我們需要的資料。
<?php
$dom = new DOMDocument();
$profile = $dom->createElement("PROFILE");
// $profile --> <PROFILE></PROFILE>
?>
複製代碼
在使用 createElement 後,建立出來的標籤會自動包含結尾標籤,因此不必另外再呼叫函式加入(也沒這種函式)
接著在通往下一層,<DATA></DATA>,基本上建構方式跟 PROFILE 一樣,都是建立 ELEMENT,因此宣告只要模仿就好。
但由於 DATA 是在 PROFILE 之下,因此在宣告完這個 ELEMENT 後,必須把他「append」在 PROFILE 之後,如下。
<?php
$dom = new DOMDocument();
$profile = $dom->createElement("PROFILE");
// $profile --> <PROFILE></PROFILE>
$data = $dom->createElement("DATA");
$dataNode = $profile->appendChild($data);
?>
複製代碼
一般上面程式碼的 $data 通常在 createElement 後,用來 appendChild 時,會同樣使用 $data 接收回傳
ex :
$data = $dom->createElement("DATA");
$data = $profile->appendChild($data);
但在此為了區分 ELEMENT 跟 NODE 的不同,故特別另外宣告 $dataNode 當作接收回傳變數。
接著的最內層各標籤,就跟 DATA 一樣都屬於子 NODE,因此在建立之後都需要 APPEND 到上一層
<?php
$dom = new DOMDocument();
$profile = $dom->createElement("PROFILE");
// $profile --> <PROFILE></PROFILE>
$data = $dom->createElement("DATA");
$dataNode = $profile->appendChild($data);
$name = $dom->createElement("NAME");
$nameNode = $dataNode->appendChild($name);
$sex = $dom->createElement("SEX");
$sexNode = $dataNode->appendChild($sex);
...
...
...
?>
複製代碼
歡迎光臨 伊莉討論區 (http://www77.eyny.com/)
Powered by Discuz!