程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> PHP中的XML拉模式解析

PHP中的XML拉模式解析

編輯:PHP綜合

PHP 5引入了新的類 XMLReader,用於讀取可擴展標記語言(Extensible Markup Language,XML)。與SimpleXML或文檔對象模型(Document Object Model,DOM)不同,XMLReader 以流模式進行操作。即它從頭到尾讀取文檔。在文檔後面的內容編譯完成之前,可以先處理已編譯好的文檔前面的內容,從而實現非常快速、非常高效、非常節省地使用內存。需要處理的文檔越大,這個特點就越發重要。

與 Simple API for XML (SAX) 不同,XMLReader 是推解析器,而不是拉解析器。這意味著程序是可以控制的。您將告訴解析器何時獲取下一個文檔片段,而不是在解析器看到文檔後告訴您所看到的內容。您將請求內容,而不是對內容進行反應。從另一個角度來考慮這個問題:XMLReader 是 Iterator 設計模式的實現,而不是 Observer 設計模式的實現。

示例問題

先從簡單例子開始討論。假定正在編寫 PHP 腳本,用來接收 XML-RPC 請求並生成響應。更具體一些,假定請求如清單 1 所示。文檔的根元素是 methodCall,它包含 methodName 元素和 params 元素。方法的名稱是 sqrt。params 元素包含一個 param 元素,param 元素包含 double,double 的平方根是希望得到的值。沒有使用名稱空間。

清單 1. XML-RPC 請求

<?xml version="1.0"?>
<methodCall>
 <methodName>sqrt</methodName>
 <params>
  <param>
   <value><double>36.0</double></value>
  </param>
 </params>
</methodCall>

下面是 PHP 腳本需要完成的工作:

檢查方法名,如果不是 sqrt(它是該腳本懂得如何處理的惟一方法),則生成錯誤響應。

找到參數,如果參數不存在或參數類型錯誤,則生成錯誤響應。

另外,計算平方根。

在表單中返回結果,如清單 2 所示。

清單 2. XML-RPC 響應

<?xml version="1.0"?>
<methodResponse>
 <params>
  <param>
   <value><double>6.0</double></value>
  </param>
 </params>
</methodResponse>

下面我們逐步展開說明。

初始化解析器並載入文檔

第一步是創建新的解析器對象。創建操作很簡單:

$reader = new XMLReader();

接著,需要為它提供一些用於解析的數據。對於 XML-RPC,這是超文本傳輸協議(Hypertext Transfer Protocol,HTTP)請求的原始主體。然後可以將該字符串傳遞到讀取器的 XML() 函數:

$request = $HTTP_RAW_POST_DATA;
$reader->XML($request);

可以解析任何字符串,無論它是從何處獲取的。例如,可以是程序中的一串文字或從本地文件讀取。還可以使用 open() 函數從外部 URL 載入數據。例如,下面的語句准備解析其中一個 Atom 提要:

$reader->XML('http://www.cafeaulait.org/today.atom');

無論是從何處獲取原始數據,現在已建立了閱讀器並為解析做好准備。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved