下面的例子简单的演示了DOM对XML的操作,详细解释请看代码中的注释
<BR><? <BR>/************************************************ <BR>** use XML in PHP5 <BR>** reference site: <BR>** http://cn.php.net/manual/zh/ref.dom.php <BR>** the follow codes need PHP5 support <BR>*************************************************/ <br><br>//首先要创建一个DOMDocument对象 <BR>$dom = new DomDocument(); <BR>//然后载入XML文件 <BR>$dom -> load("test.xml"); <br><br>//输出XML文件 <BR>//header("Content-type: text/xml;charset=gb2312"); <BR>//echo $dom -> saveXML(); <br><br>//保存XML文件,返回值为int(文件大小,以字节为单位) <BR>//$dom -> save("newfile.xml"); <br><br>echo "<hr />取得所有的title元素:<hr />"; <BR>$titles = $dom -> getElementsByTagName("title"); <BR>foreach ($titles as $node){ <BR>echo $node -> textContent . "<br />"; <BR>//这样也可以 <BR>//echo $node->firstChild->data . "<br />"; <BR>} <br><br>/* <BR>echo "<hr />从根结点遍历所有结点:<br />"; <BR>foreach ($dom->documentElement->childNodes as $items) { <BR>//如果节点是一个元素(nodeType == 1)并且名字是item就继续循环 <BR>if ($items->nodeType == 1 && $items->nodeName == "item") { <BR>foreach ($items->childNodes as $titles) { <BR>//如果节点是一个元素,并且名字是title就打印它. <BR>if ($titles->nodeType == 1 && $titles->nodeName == "title") { <BR>print $titles->textContent . "\n"; <BR>} <BR>} <BR>} <BR>} <BR>*/ <br><br>//使用XPath查询数据 <BR>echo "<hr />使用XPath查询的title节点结果:<hr />"; <BR>$xpath = new domxpath($dom); <BR>$titles = $xpath->query("/rss/channel/item/title"); <BR>foreach ($titles as $node){ <BR>echo $node->textContent."<br />"; <BR>} <BR>/* <BR>这样和使用getElementsByTagName()方法差不多,但是Xpath要强大的多 <BR>深入一点可能是这样: <BR>/rss/channel/item[position() = 1]/title 返回第一个item元素的所有 <BR>/rss/channel/item/title[@id = '23'] 返回所有含有id属性并且值为23的title <BR>/rss/channel/&folder&/title 返回所有articles元素下面的title(译者注:&folder&代表目录深度) <BR>*/ <br><br><BR>//向DOM中写入新数据 <BR>$item = $dom->createElement("item"); <BR>$title = $dom->createElement("title"); <BR>$titleText = $dom->createTextNode("title text"); <BR>$title->appendChild($titleText); <BR>$item->appendChild($title); <BR>$dom->documentElement->getElementsByTagName('channel')->item(0)->appendChild($item); <br><br>//从DOM中删除节点 <BR>//$dom->documentElement->RemoveChild($dom->documentElement->getElementsByTagName("channel")->item(0)); <BR>//或者使用xpath查询出节点再删除 <BR>//$dom->documentElement->RemoveChild($xpath->query("/rss/channel")->item(0)); <BR>//$dom->save("newfile.xml"); <br><br>//从DOM中修改节点数据 <BR>//修改第一个title的文件 <BR>//这个地方比较笨,新创建一个节点,然后替换旧的节点。如果哪位朋友有其他好的方法请一定要告诉我 <BR>$firstTitle = $xpath->query("/rss/channel/item/title")->item(0); <BR>$newTitle = $dom->createElement("title"); <BR>$newTitle->appendChild(new DOMText("This's the new title text!!!")); <BR>$firstTitle->parentNode->replaceChild($newTitle, $firstTitle); <BR>//修改属性 <BR>//$firstTitle = $xpath->query("/rss/channel/item/title")->item(0); <BR>//$firstTitle->setAttribute("orderby", "4"); <BR>$dom->save("<div style="color:transparent">本&文来源gaodai^.ma#com搞#代!码网</div><strong>搞gaodaima代码</strong>newfile.xml"); <br><br>echo "<hr />查看newfile.xml"; <br><br>//下面的代码获得并解析php.net的首页,将返第一个title元素的内容。 <BR>/* <BR>$dom->loadHTMLFile("http://www.php.net/"); <BR>$title = $dom->getElementsByTagName("title"); <BR>print $title->item(0)->textContent; <BR>*/ <BR>?> <BR>
下面是test.xml文件代码:
<BR><?xml version="1.0" encoding="gb2312"?> <BR> <BR> <BR><title>javascript</title> <BR><link>http://blog.gaodaima.com/zhongmao/category/29515.aspx <BR>javascript <BR>zh-chs <BR>.text version 0.958.2004.2001 <BR> <BR>zhongmao <BR><title>out put excel used javascript</title> <BR><link>http://blog.gaodaima.com/zhongmao/archive/2004/09/15/105385.aspx <BR>wed, 15 sep 2004 13:32:00 gmt <BR>http://blog.gaodaima.com/zhongmao/archive/2004/09/15/105385.aspx <BR>http://blog.gaodaima.com/zhongmao/comments/105385.aspx <BR>http://blog.gaodaima.com/zhongmao/archive/2004/09/15/105385.aspx#feedback <BR>2 <BR>http://blog.gaodaima.com/zhongmao/comments/commentrss/105385.aspx <BR>http://blog.gaodaima.com/zhongmao/services/trackbacks/105385.aspx <BR>test description <BR> <BR> <BR>zhongmao <BR><title>out put word used javascript</title> <BR><link>http://blog.gaodaima.com/zhongmao/archive/2004/08/06/67161.aspx <BR>fri, 06 aug 2004 16:33:00 gmt <BR>http://blog.gaodaima.com/zhongmao/archive/2004/08/06/67161.aspx <BR>http://blog.gaodaima.com/zhongmao/comments/67161.aspx <BR>http://blog.gaodaima.com/zhongmao/archive/2004/08/06/67161.aspx#feedback <BR>0 <BR>http://blog.gaodaima.com/zhongmao/comments/commentrss/67161.aspx <BR>http://blog.gaodaima.com/zhongmao/services/trackbacks/67161.aspx <BR>test word description <BR> <BR> <BR>zhongmao <BR><title>xmlhttp</title> <BR><link>http://blog.gaodaima.com/zhongmao/archive/2004/08/02/58417.aspx <BR>mon, 02 aug 2004 10:11:00 gmt <BR>http://blog.gaodaima.com/zhongmao/archive/2004/08/02/58417.aspx <BR>http://blog.gaodaima.com/zhongmao/comments/58417.aspx <BR>http://blog.gaodaima.com/zhongmao/archive/2004/08/02/58417.aspx#feedback <BR>0 <BR>http://blog.gaodaima.com/zhongmao/comments/commentrss/58417.aspx <BR>http://blog.gaodaima.com/zhongmao/services/trackbacks/58417.aspx <BR>xmlhttpaaa asd bb cc dd <BR> <BR> <BR> <BR>