使用PHP和AJAX的XML編程_PHP教程

來源:互聯網
上載者:User
  在 SOA 架構中,程式員經常使用 XML 在應用程式之間交換結構化和半結構化的資料。XML 及其相關技術 — 文件物件模型(Document Object Model,DOM)、XPath、HTTP、XQuery 和可延伸樣式表語言轉換(Extensible Stylesheet Language Transformations,XSLT) — 為快速應用程式開發提供了一個強大的環境。構建在這些技術之上的應用程式將佔用更小的記憶體空間,需要更低的維護成本,同時又擁有更高的品質和靈活性。

  DB2 和其他關聯式資料庫的 XML 方面的特性已經相當成熟,因此除了儲存和管理關聯性資料之外,它們還是儲存和管理 XML 資料的理想選擇。DB2 9 XML 支援(稱為 pureXML)提供了以純 XML 的形式(換句話說,就是帶注釋的、樹型的階層式存放區)儲存 XML 的能力。在 DB2 9 中,XML 資料可以用 XML 模式索引,可以從關係資料群組合而成,可以分解為關係資料,可以查詢和轉換,可以獨立發布,或者通過混合使用 SQL/XML 和 XQuery 與關係資料群組合起來。

  網頁瀏覽器也正在為客戶機指令碼提供更多的功能來有效地處理 XML。通過使用非同步 JavaScript 和 XML(Asynchronous JavaScript and XML,Ajax),Web 頁面現在可以直接對應用伺服器進行遠端程序呼叫,並且可以在任何返回的 XML 資料上使用 DOM API。

  本文將展示如何利用 DB2 XML、Ajax 和 PHP Hypertext Preprocessor (PHP) 提供的功能來編寫簡單的基於 XML 的應用程式。通過樣本情境的協助,您將學習如何在 JavaScript 中調用 PHP 應用程式;如何使用 DOM 和 SimpleXML API 修改 XML 資料;如何將 XML 從客戶機傳送到應用程式再到資料庫;以及如何建立 PHP Web 服務來使用 SQL/XML 和 XQuery 發布關於 XML 資料的報告。

  XML 優點

  大多數應用程式都用於建立、儲存、操縱和呈現業務資料。對象封裝是指將業務資料綁在一起,使商務邏輯更容易處理它們。這些封裝器對象的很多功能都是根據關係和格式化規則來提供業務資料的結構,並使商務邏輯能夠操縱、發布和序列化封裝的資料。

  圖 1. 基於對象封裝器的應用程式

  

  圖 1 闡釋了使用對象封裝器的一個樣本人壽保險應用程式。每個方框表示一個對象,每個對象至少有:

  ·一個建構函式

  ·Getter 和 Setter 方法

  ·驗證代碼

  ·內部對象層次的序列化

  這些對象與實際的商務邏輯沒有關係。對象封裝是為了使商務邏輯更容易管理業務資料。封裝資料所需的代碼比商務邏輯要多得多。更多的代碼將導致更多的 bug、更大的固定性、更多的維護和更高的成本。

如果對象中的資料變數可以格式化為 XML 結構,並且對象的主要作用是將這些資料暴露給商務邏輯並讓商務邏輯操縱它們,那麼可以用 DOM 代替對象。

  圖 2. 基於 XML 的應用程式

  

  圖 2 展示了一個使用 XML 和 DOM 封裝器的樣本保險應用程式。圖 1 中的所有資料封裝器對象都用一個 DOM 對象代替。業務資料是用 XML 建模的,DOM 提供了必要的 API 來:

  ·建立新的 XML 對象。

  ·更新 XML 對象的值。

  ·導航 XML 對象。

  ·使用 XPath 在對象層次中搜尋。

  ·序列化和反序列化 XML 對象層次(換句話說,就是內建持久性)。

  通過使用 XML,可以避免使用大多數用於管理業務資料的封裝器對象。應用程式將變得更加簡潔,並且更多地將重點放在商務邏輯上,而不是資料管理上。

  XML 和架構

  將 XML 引入架構中可以為表示業務資料帶來一種標準化的方式。XML 可以提供資料的結構;XML 模式施加結構和格式化規則;DOM API 和 XQuery、XPath 及 XSLT 之類的語言使商務邏輯可以有效地操縱、發布和序列化資料。由於業務資料的 XML 表示在客戶機、中介層和資料庫中都是一致的,因此操縱這些對象的代碼也是類似的。

  我將展示如何在三層環境中構建基於 XML 的應用程式,這個三層環境由以下幾個部分組成:

  ·Web 客戶機:Asynchronous JavaScript and XML (Ajax),DOM

  ·應用伺服器:PHP 和 SimpleXML

  ·資料庫: DB2 9 和 SQL/XML,XQuery

基於 ACORD 人壽資料模型的情境

  我們來考慮一個簡單的人壽保險情境,在這個情境中,首先建立一個表示新保單的 XML 文檔,然後查詢和操縱這個文檔,另外還將這個文檔從一層移動到另一層。這個文檔基於合作運營研究與發展協會(Association for Cooperative Operations Research & Development,ACORD)用於人壽保險規範的 XML,它定義了健康保險和年金保險需要交換的資料。

  為了申請一個新的保險,客戶需要提供一些基本資料。部分資訊是在一個 PHP 應用程式中填寫的,還有一部分是在客戶機瀏覽器中填寫的。然後,保單儲存在一個 DB2 XML 列中。在 DB2 9 中,XML 類型的列在內部將 XML 資料存放區為一棵解析後的樹,與關係資料存放區在不同的地方。這種方法是 DB2 9 特有的,更早的 DB2 版本則使用關係儲存基礎設施來儲存 XML。

  下面是保單 XML 文檔在客戶機與應用程式之間的流程:

  ·在 Web 客戶機中,客戶更新頁面並單擊 Submit。

  ·Web 客戶機向 PHP 發出一個 XMLHTTP 要求,以獲得新的空白保單文檔。

  ·PHP 應用程式開啟一個空白的保單文檔,用一個全域惟一標識符(GUID)更新它,然後將該文檔返回給 Web 客戶機。

  ·Web 客戶機使用 Ajax 捕捉返回的事件,並檢索 XML DOM,然後用 Web 頁面中輸入的資訊填充該文檔。

  ·Web 客戶機使用 XMLHTTP 將更新後的 XML 發送給 PHP 應用程式。

  圖 3. 建立新的保單請求的 Web 網站。

  

圖 3 展示了用於建立新的保單請求的 Web 頁面。當使用者單擊 Submit 按鈕後,JavaScript 函數 submitPolicy() 被調用(見清單 1)。該函數向 PHP 應用程式 createNewPolicy.php 發出一個 HTTP 要求,以獲得一個空白的保單。它還設定一個回呼函數 fillPolicy(),用於捕捉從 HTTP 要求返回的事件。

  

  當第一個請求到達中介層的 PHP 應用伺服器時,一個新的 XML 保單文檔被裝載到 SimpleXML 對象中。通過使用 SimpleXML API,用 PHP 應用程式中建立的 GUID 更新 TransRefGUID 元素。

  header('Content-type: text/xml');

  $fileContents = file_get_contents("$basedir/acord.xml");

  $dom = simplexml_load_string($fileContents);

  $dom->TXLifeRequest->TransRefGUID=$guid;

  echo $dom->asXML();

  然後,這個文檔被發送到客戶機。

  對於本文,我們假設 GUID 是通過某種機制(例如時間和隨機數的組合)建立的。更重要的是理解如何將表示保單的 XML 文檔視作記憶體中的業務對象階層,以及如何使用 SimpleXML API (或 DOM/XPath)來導航和更新這個對象。

  填充基本客戶資訊

  在 Web 客戶機中,fillPolicy() 函數讀取返回的值。現在,包含返回 XML 的記憶體中表示的 DOM 對象可用於操縱保單文檔。客戶在 Web 頁面上輸入的資訊被直接用於更新 DOM。當使用客戶資訊更新了保單之後,使用 XMLHTTP 將修改後的 DOM 對象提交回 PHP 應用程式(見清單 2)。即使是 HTML 元件值也是用 DHTMLDocument Object Model (DOM) 讀取的。

  


http://www.bkjia.com/PHPjc/446991.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/446991.htmlTechArticle在 SOA 架構中,程式員經常使用 XML 在應用程式之間交換結構化和半結構化的資料。XML 及其相關技術 — 文件物件模型(Document Object Model,D...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.