由于DOM方法在遍历和操作XML文档时比较罗嗦,所以任何DOM兼容的代码都有明显的优点-与任何其它实现相同的W3C兼容的对象模型的API兼容。
在下面的实例代码中,我们使用DOM来显示关于每本书的信息。首先,我们遍历一下列表目录,把它们的Id和相应的名字装载到一个索引数组中。然后,我们显示每本书的一个简短描述:
PHP:
<?php
/*这里我们必须指定XML版本:也即是1.0 */
$xml = new DomDocument('1.0');
$xml->load('xml/library.xml');
/*首先,创建一个目录列表*/
$categories = array();
$XMLCategories = $xml->getElementsByTagName('categories')->item(0);
foreach($XMLCategories->getElementsByTagName('category') as $categoryNode) {
/*注意我们是如何得到属性的*/
$cid = $categoryNode->getAttribute('cid');
$categories[$cid] = $categoryNode->firstChild->nodeValue;
}
?>
<html>
<head>
<title>XML Library</title>
</head>
<body>
<?
php foreach($xml->getElementsBytagName('book') as $book):
/*查找标题*/
$title = $book->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
/*查找作者-为了简化起见,我们假设仅仅有一个作者*/
$author = $book->getElementsByTagName('author')->item(0)->firstChild->nodeValue;
/* 列表目录*/
$bookCategories = $book->getElementsByTagName('category');
$catList = '';
foreach($bookCategories as $category) {
$catList .= $categories[$category->firstChild->nodeValue] . ', ';
}
$catList = substr($catList, 0, -2); ?>
<div>
<h2><?php echo($title) ?></h2>
<p><b>Author:</b>: <?php echo($author) ?></p>
<p><b>Categories: </b>: <?php echo($catList) ?></p>
</div>
<? php endforeach; ?>
</html>
[html]
再提一下,修改XML是较麻烦的。例如,添加一个目录的代码如下:
PHP:
[code]
function addCategory(DOMDocument $xml, $catID, $catName) {
$catName = $xml->createTextNode($catName); //创建一个结点以存储文本
$category = $xml->createElement('category'); //创建一个目录元素
$category->appendChild($catName); //把文本添加到目录元素上
$category->setAttribute('cid', $catID); //设置目录的ID
$XMLCategories = $xml->getElementsByTagName('categories')->item(0);
$XMLCategories->appendChild($category); //添加新目录
}
五、 保存XML
你可以使用save()和saveXML()方法之一来把DOM描述转换回XML字符串描述。save()方法用一指定的命名把XML保存到一个文件中,而saveXML()从文档的部分或整体中返回一个字符串。







