建立文檔類型聲明 通常而言,XML聲明放在文檔頂部。在PHP中聲明十分簡單:只需實例化一個DOM文檔類的對象並賦予它一個版本號。查看程序清單A: 程序清單 A <?php // create doctype $dom = new DOMDocument("1.0"); // display document in browser as plain text // display document in browser as plain text // for readability purposes header("Content-Type: text/plain"); // save and display tree echo $dom->saveXML(); ?> 請注意DOM文檔對象的saveXML()方法。稍後我再詳細介紹這一方法,如今你只須要簡單認識到它用於輸出XML文檔的當前快照到一個文件或瀏覽器。在本例,爲加強可讀性,我已經將ASCII碼文本直接輸出至瀏覽器。在實際應用中,可將以text/XML頭文件發送到瀏覽器。 如在瀏覽器中查看輸出,你可看到以下代碼: <?xml version="1.0"?> 添加元素和文本節點 XML真正強大的功能是來自其元素與封裝的內容。幸運的是,一旦你初始化DOM文檔,不少操做變得很簡單。此過程包含以下兩步驟: 對想添加的每一元素或文本節點,經過元素名或文本內容調用DOM文檔對象的createElement()或createTextNode()方法。這將建立對應於元素或文本節點的新對象。 經過調用節點的appendChild()方法,並把其傳遞給上一步中建立的對象,並在XML文檔樹中將元素或文本節點添加到父節點。 如下範例將清楚地演示這2步驟,請查看程序清單B。 程序清單 B <?php // create doctype $dom = new DOMDocument("1.0"); // display document in browser as plain text // for readability purposes header("Content-Type: text/plain"); // create root element $root = $dom->createElement("toppings"); $dom->appendChild($root); // create child element $item = $dom->createElement("item"); $root->appendChild($item); // create text node $text = $dom->createTextNode("pepperoni"); $item->appendChild($text); // save and display tree echo $dom->saveXML(); ?> 這裏,我首先建立一個名字爲<toppings>的根元素,並使它歸於XML頭文件中。而後,我創建名爲<item>的元素並使它歸於根元素。最後,我又建立一個值爲「pepperoni」的文本節點並使它歸於<item>元素。最終結果以下: <?xml version="1.0"?> <toppings> <item>pepperoni</item> </toppings> 若是你想添加另一個topping,只需建立另一個<item>並添加不一樣的內容,如程序清單C所示。 程序清單C <?php // create doctype $dom = new DOMDocument("1.0"); // display document in browser as plain text // for readability purposes header("Content-Type: text/plain"); // create root element $root = $dom->createElement("toppings"); $dom->appendChild($root); // create child element $item = $dom->createElement("item"); $root->appendChild($item); // create text node $text = $dom->createTextNode("pepperoni"); $item->appendChild($text); // create child element $item = $dom->createElement("item"); $root->appendChild($item); // create another text node $text = $dom->createTextNode("tomato"); $item->appendChild($text); // save and display tree echo $dom->saveXML(); ?> 如下是執行程序清單C後的輸出: <?xml version="1.0"?> <toppings> <item>pepperoni</item> <item>tomato</item> </toppings> 添加屬性 經過使用屬性,你也能夠添加適合的信息到元素。對於PHP DOM API,添加屬性須要兩步:首先用DOM文檔對象的createAttribute()方法建立擁有此屬性名字的節點,而後將文檔節點添加到擁有屬性值的屬性節點。詳見程序清單D。 程序清單 D <?php // create doctype $dom = new DOMDocument("1.0"); // display document in browser as plain text // for readability purposes header("Content-Type: text/plain"); // create root element $root = $dom->createElement("toppings"); $dom->appendChild($root); // create child element $item = $dom->createElement("item"); $root->appendChild($item); // create text node $text = $dom->createTextNode("pepperoni"); $item->appendChild($text); // create attribute node $price = $dom->createAttribute("price"); $item->appendChild($price); // create attribute value node $priceValue = $dom->createTextNode("4"); $price->appendChild($priceValue); // save and display tree echo $dom->saveXML(); ?> 輸出以下所示: <?xml version="1.0"?> <toppings> <item price="4">pepperoni</item> </toppings> 添加CDATA模塊和過程嚮導 雖然不常常使用CDATA模塊和過程嚮導,可是經過調用DOM文檔對象的createCDATASection()和createProcessingInstruction()方法, PHP API 也能很好地支持CDATA和過程嚮導,請見程序清單E。 程序清單 E <?php // create doctype // create doctype $dom = new DOMDocument("1.0"); // display document in browser as plain text // for readability purposes header("Content-Type: text/plain"); // create root element $root = $dom->createElement("toppings"); $dom->appendChild($root); // create child element $item = $dom->createElement("item"); $root->appendChild($item); // create text node $text = $dom->createTextNode("pepperoni"); $item->appendChild($text); // create attribute node $price = $dom->createAttribute("price"); $item->appendChild($price); // create attribute value node $priceValue = $dom->createTextNode("4"); $price->appendChild($priceValue); // create CDATA section $cdata = $dom->createCDATASection(" Customer requests that pizza be sliced into 16 square pieces "); $root->appendChild($cdata); // create PI $pi = $dom->createProcessingInstruction("pizza", "bake()"); $root->appendChild($pi); // save and display tree echo $dom->saveXML(); ?> 輸出以下所示: <?xml version="1.0"?> <toppings> <item price="4">pepperoni</item> <![CDATA[ Customer requests that pizza be sliced into 16 square pieces ]]> <?pizza bake()?> </toppings> 保存結果 一旦已經實現你的目標,就能夠將結果保存在一個文件或存儲於PHP的變量。經過調用帶有文件名的save()方法能夠將結果保存在文件中,而經過調用saveXML()方法可存儲於PHP的變量。請參考如下實例(程序清單F): 程序清單 F <?php // create doctype $dom = new DOMDocument("1.0"); // create root element $root = $dom->createElement("toppings"); $dom->appendChild($root); $dom->formatOutput=true; // create child element $item = $dom->createElement("item"); $root->appendChild($item); // create text node $text = $dom->createTextNode("pepperoni"); $item->appendChild($text); // create attribute node $price = $dom->createAttribute("price"); $item->appendChild($price); // create attribute value node $priceValue = $dom->createTextNode("4"); $price->appendChild($priceValue); // create CDATA section $cdata = $dom->createCDATASection(" Customer requests that pizza be sliced into 16 square pieces "); $root->appendChild($cdata); // create PI $pi = $dom->createProcessingInstruction("pizza", "bake()"); $root->appendChild($pi); // save tree to file $dom->save("order.xml"); // save tree to string $order = $dom->save("order.xml"); ?> 下面是實際的例子,你們能夠測試下。 xml.php(生成xml) <? $conn = mysql_connect('localhost', 'root', '123456') or die('Could not connect: ' . mysql_error()); mysql_select_db('vdigital', $conn) or die ('Can\'t use database : ' . mysql_error()); $str = "SELECT id,username FROM `admin` GROUP BY `id` ORDER BY `id` ASC"; $result = mysql_query($str) or die("Invalid query: " . mysql_error()); if($result) { $xmlDoc = new DOMDocument(); if(!file_exists("01.xml")){ $xmlstr = "<?xml version='1.0' encoding='utf-8' ?><message></message>"; $xmlDoc->loadXML($xmlstr); $xmlDoc->save("01.xml"); } else { $xmlDoc->load("01.xml");} $Root = $xmlDoc->documentElement; while ($arr = mysql_fetch_array($result)){ $node1 = $xmlDoc->createElement("id"); $text = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["id"])); $node1->appendChild($text); $node2 = $xmlDoc->createElement("name"); $text2 = $xmlDoc->createTextNode(iconv("GB2312","UTF-8",$arr["username"])); $node2->appendChild($text2); $Root->appendChild($node1); $Root->appendChild($node2); $xmlDoc->save("01.xml"); } } mysql_close($conn); ?> test.php(應用測試) <? $xmlDoc = new DOMDocument(); $xmlDoc->load("http://localhost/xml/xml.php"); $x=$xmlDoc->getElementsByTagName('name'); for ($i=0; $i<=$x->length-1; $i++) { if(strpos($x->item($i)->nodeValue,"fang")!==false) { echo $x->item($i)->parentNode->childNodes->item(1)->nodeValue; } } ?>