伊莉討論區

標題: 由 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 來宣告物件。


  1. <?php
  2. $dom = new DOMDocument();
  3. ?>
複製代碼




接著先了解在 DOMDocument 之下有哪些方法或參數,可以參考網路的 Reference -PHP:DOMDocument
在開始建構你的 XML 檔案之前,必須先了解你需要建立哪些標籤,架構為何?

以最簡單的架構「個人資料」來建立的話,少不了的就是『姓名』『生日』『性別』... 等
因此我們先暫時規劃如下

  1. <PROFILE>
  2.    <DATA>
  3.       <NAME></NAME>
  4.       <SEX></SEX>
  5.       <BIRTH></BIRTH>
  6.       <PHONE>
  7.          <HOME></HOME>
  8.          <CELL></CELL>
  9.       </PHONE>
  10.       <...></...>
  11.       <...></...>
  12.    </DATA>
  13. </PROFILE>
複製代碼


首先看到最外層架構 <PROFILE> 的部分,對於 XML 格式來說,這些標籤(TAG)都屬於元素(ELEMENT),
因此在建立的時候,使用 createElement 函式來產生

        DOMElement DOMDocument::createElement ( string <tt>$name</tt> [, string <tt>$value</tt> ] )

回傳為 DOMElement 格式,代表的東西就是你的標籤,後面接的 value 可以直接定義包含的內容。
但目前我們算是在巢狀架構中的最外層,因此可以先不用預設值,等在內層後再加入我們需要的資料。

  1. <?php
  2. $dom = new DOMDocument();
  3. $profile = $dom->createElement("PROFILE");
  4. // $profile --> <PROFILE></PROFILE>
  5. ?>
複製代碼


在使用 createElement 後,建立出來的標籤會自動包含結尾標籤,因此不必另外再呼叫函式加入(也沒這種函式)
接著在通往下一層,<DATA></DATA>,基本上建構方式跟 PROFILE 一樣,都是建立 ELEMENT,因此宣告只要模仿就好。
但由於 DATA 是在 PROFILE 之下,因此在宣告完這個 ELEMENT 後,必須把他「append」在 PROFILE 之後,如下。

  1. <?php
  2. $dom = new DOMDocument();
  3. $profile = $dom->createElement("PROFILE");
  4. // $profile --> <PROFILE></PROFILE>

  5. $data = $dom->createElement("DATA");
  6. $dataNode = $profile->appendChild($data);
  7. ?>
複製代碼


一般上面程式碼的 $data 通常在 createElement 後,用來 appendChild 時,會同樣使用 $data 接收回傳
ex :
        $data = $dom->createElement("DATA");
        $data = $profile->appendChild($data);

但在此為了區分 ELEMENT 跟 NODE 的不同,故特別另外宣告 $dataNode 當作接收回傳變數。
接著的最內層各標籤,就跟 DATA 一樣都屬於子 NODE,因此在建立之後都需要 APPEND 到上一層

  1. <?php
  2. $dom = new DOMDocument();
  3. $profile = $dom->createElement("PROFILE");
  4. // $profile --> <PROFILE></PROFILE>

  5. $data = $dom->createElement("DATA");
  6. $dataNode = $profile->appendChild($data);

  7. $name = $dom->createElement("NAME");
  8. $nameNode = $dataNode->appendChild($name);

  9. $sex = $dom->createElement("SEX");
  10. $sexNode = $dataNode->appendChild($sex);
  11. ...
  12. ...
  13. ...

  14. ?>
複製代碼






歡迎光臨 伊莉討論區 (http://www77.eyny.com/) Powered by Discuz!