有許多技術可用於用 PHP 讀取和編寫 XML。本文提供了三種方法讀取 XML:使用 DOM 庫、使用 SAX 解析器和使用正則表達式。還介紹了使用 DOM 和 PHP 文本模板編寫 XML。
用 PHP 讀取和編寫可擴展標記語言(XML)看起來可能有點恐怖。實際上,XML 和它的所有相關技術可能是恐怖的,但是用 PHP 讀取和編寫 XML 不一定是項恐怖的任務。首先,需要學習一點關於 XML 的知識 —— 它是什麼,用它做什麼。然後,需要學習如何用 PHP 讀取和編寫 XML,而有許多種方式可以做這件事。
本文提供了 XML 的簡短入門,然後解釋如何用 PHP 讀取和編寫 XML。
什麼是 XML?
XML 是一種數據存儲格式。它沒有定義保存什麼數據,也沒有定義數據的格式。XML 只是定義了標記和這些標記的屬性。格式良好的 XML 標記看起來像這樣:
Jack Herrington
這個 標記包含一些文本:Jack Herrington。
不包含文本的 XML 標記看起來像這樣:
用 XML 對某件事進行編寫的方式不止一種。例如,這個標記形成的輸出與前一個標記相同:
也可以向 XML 標記添加屬性。例如,這個 標記包含 first 和 last 屬性:
也可以用 XML 對特殊字符進行編碼。例如,& 符號可以像這樣編碼:
&
包含標記和屬性的 XML 文件如果像示例一樣格式化,就是格式良好的,這意味著標記是對稱的,字符的編碼正確。清單 1 是一份格式良好的 XML 的示例。
清單 1. XML 圖書列表示例
Jack Herrington
O'Reilly
Jack Herrington
O'Reilly
清單 1 中的 XML 包含一個圖書列表。父標記 包含一組 標記,每個 標記又包含 、
O'Reilly
Jack Herrington
O'Reilly
%
使用 DOM 的真正價值在於它創建的 XML 總是格式正確的。但是如果不能用 DOM 創建 XML 時該怎麼辦?
用 PHP 編寫 XML
如果 DOM 不可用,可以用 PHP 的文本模板編寫 XML。清單 7 顯示了 PHP 如何構建圖書 XML 文件。
清單 7. 用 PHP 編寫圖書 XML
$books = array();
$books [] = array(
'title' => 'PHP Hacks',
'author' => 'Jack Herrington',
'publisher' => "O'Reilly"
);
$books [] = array(
'title' => 'Podcasting Hacks',
'author' => 'Jack Herrington',
'publisher' => "O'Reilly"
);
?>
foreach( $books as $book )
{
?>
}
?>
腳本的頂部與 DOM 腳本類似。腳本的底部打開 books 標記,然後在每個圖書中迭代,創建 book 標記和所有的內部 title、author 和 publisher 標記。
這種方法的問題是對實體進行編碼。為了確保實體編碼正確,必須在每個項目上調用 htmlentities 函數,如清單 8 所示。
清單 8. 使用 htmlentities 函數對實體編碼
foreach( $books as $book )
{
$title = htmlentities( $book['title'], ENT_QUOTES );
$author = htmlentities( $book['author'], ENT_QUOTES );
$publisher = htmlentities( $book['publisher'], ENT_QUOTES );
?>
}
?>
這就是用基本的 PHP 編寫 XML 的煩人之處。您以為自己創建了完美的 XML,但是在試圖使用數據的時候,馬上就會發現某些元素的編碼不正確。
結束語
XML 周圍總有許多誇大之處和混淆之處。但是,並不像您想像的那麼難 —— 特別是在 PHP 這樣優秀的語言中。在理解並正確地實現了 XML 之後,就會發現有許多強大的工具可以使用。XPath 和 XSLT 就是這樣兩個值得研究的工具。