<books>
<book>
<author>jack herrington</author>
<title>php教程 hacks</title>
<publisher>o'reilly</publisher>
</book>
<book>
<author>jack herrington</author>
<title>podcasting hacks</title>
<publisher>o'reilly</publisher>
</book>
</books>
1 中的 xml 包含一個圖書列表。父標記 <books> 包含一組 <book> 標記,每個 <book> 標記又包含 <author>、<title> 和 <publisher> 標記。
當 xml 文檔的標記結構和內容得到外部模式檔案的驗證後,xml 文檔就是正確的。模式檔案可以用不同的格式指定。對於本文來說,所需要的只是格式良好的 xml。
如果覺得 xml 看起來很像超文字標記語言 (HTML)(html),那麼就對了。xml 和 html 都是基於標記的語言,它們有許多相似之處。但是,要著重指出的是:雖然 xml 文檔可能是格式良好的 html,但不是所有的 html 文檔都是格式良好的 xml。換行標記(br)是 xml 和 html 之間區別的一個好例子。這個換行標記是格式良好的 html,但不是格式良好的 xml:
<p>this is a paragraph<br>
with a line break</p>
這個換行標記是格式良好的 xml 和 html:
<p>this is a paragraph<br />
with a line break</p>
如果要把 html 編寫成同樣是格式良好的 xml,請遵循 w3c 委員會的可擴充超文字標記語言 (HTML)(xhtml)標準。所有現代的瀏覽器都能呈現 xhtml。而且,還可以用 xml 工具讀取 xhtml 並找出文檔中的資料,這比解析 html 容易得多。
使用 dom 庫讀取 xml
讀取格式良好的 xml 檔案最容易的方式是使用編譯成某些 php 安裝的文件物件模型 (dom)庫。dom 庫把整個 xml 文檔讀入記憶體,並用節點樹表示它,如圖 1 所示。
圖 1. 圖書 xml 的 xml dom 樹
樹頂部的 books 節點有兩個 book 子標記。在每本書中,有 author、publisher 和 title 幾個節點。author、publisher 和 title 節點分別有包含文本的文本子節點。
讀取圖書 xml 檔案並用 dom 顯示內容的代碼如清單 2 所示。
清單 2. 用 dom 讀取圖書 xml
複製代碼 代碼如下:
<?php
$doc = new domdocument();
$doc->load( 'books.xml' );
$books = $doc->getelementsbytagname( "book" );
foreach( $books as $book )
{
$authors = $book->getelementsbytagname( "author" );
$author = $authors->item(0)->nodevalue;
$publishers = $book->getelementsbytagname( "publisher" );
$publisher = $publishers->item(0)->nodevalue;
$titles = $book->getelementsbytagname( "title" );
$title = $titles->item(0)->nodevalue;
echo "$title - $author - $publishern";
}
?>