色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

PHP XML操作的各種方法解析(比較詳細(xì))

XML是一種流行的半結(jié)構(gòu)化文件格式,以一種類似數(shù)據(jù)庫(kù)的格式存儲(chǔ)數(shù)據(jù)。在實(shí)際應(yīng)用中,一些簡(jiǎn)單的、安全性較低的數(shù)據(jù)往往使用 XML文件的格式進(jìn)行存儲(chǔ)。這樣做的好處一方面可以通過減少與數(shù)據(jù)庫(kù)的交互性操作提高讀取效率,另一方面可以有效利用 XML的優(yōu)越性降低程序的編寫難度。
php提供了一整套的讀取 XML文件的方法,很容易的就可以編寫基于 XML的腳本程序。本章將要介紹 php與 XML的操作方法,并對(duì)幾個(gè)常用的 XML類庫(kù)做一些簡(jiǎn)要介紹。
1 XML簡(jiǎn)介
XML是“可擴(kuò)展性標(biāo)識(shí)語(yǔ)言(eXtensible Markup Language)”的縮寫,是一種類似于 HTML的標(biāo)記性語(yǔ)言。但是與 HTML不同,XML主要用于描述數(shù)據(jù)和存放數(shù)據(jù),而 HTML主要用于顯示數(shù)據(jù)。
XML是一種“元標(biāo)記”語(yǔ)言,開發(fā)者可以根據(jù)自己的需要?jiǎng)?chuàng)建標(biāo)記的名稱。例如,下面的 XML代碼可以用來(lái)描述一條留言。
復(fù)制代碼 代碼如下:
<thread>
<title>Welcome</title>
<author>Simon</author>
<content>Welcome to XML guestbook!!</content>
</thread>

其中,<thread>與</thread>標(biāo)簽標(biāo)記了這是一段留言。在留言中有標(biāo)題、作者、內(nèi)容,完整的表述了一條留言信息。
在一個(gè) XML文件的頂部,通常使用<?xml version=”1.0″?>來(lái)標(biāo)識(shí) XML數(shù)據(jù)的開始和 XML數(shù)據(jù)使用標(biāo)準(zhǔn)的版本信息。在瀏覽器中訪問 XML文件可以看到層次分明的 XML數(shù)據(jù)信息,如圖 1所示。
 
XML的發(fā)展非常迅速,近些年來(lái)很多軟件開發(fā)商都開始采用 XML的開發(fā)標(biāo)準(zhǔn)進(jìn)行應(yīng)用程序的開發(fā)。并且,很多新興技術(shù)都架構(gòu)在 XML數(shù)據(jù)之上。這意味著 XML將與 HTML一樣成為 Web技術(shù)不可或缺的一部分。
2 簡(jiǎn)單的 XML操作
在實(shí)際應(yīng)用中,php與 XML的交互操作應(yīng)用非常廣泛。SimpleXML組件是 php5新增加的一個(gè)簡(jiǎn)
單的 XML操作組件,與傳統(tǒng)的 XML組件相比,SimpleXML組件的使用非常簡(jiǎn)單。本節(jié)將對(duì)使用
SimpleXML組件操作 XML的方法做一下詳細(xì)介紹。
2.1 創(chuàng)建一個(gè) SimpleXML對(duì)象
SimpleXML對(duì)象是用來(lái)臨時(shí)存儲(chǔ) XML數(shù)據(jù)的臨時(shí)變量,對(duì) XML進(jìn)行的操作都是通過操作 SimpleXML對(duì)象來(lái)完成的。SimpleXML組件提供了兩種創(chuàng)建 SimpleXML對(duì)象的方法。第一種方法是使用 simplexml_load_string函數(shù)讀取一個(gè)字符串型變量中的 XML數(shù)據(jù)來(lái)完成創(chuàng)建的,其語(yǔ)法格式如下所示。
simplexml_load_string(string data)
這里的 data變量用于存儲(chǔ) XML數(shù)據(jù)。以下代碼使用 simplexml_load_string函數(shù)創(chuàng)建了一個(gè) SimpleXML對(duì)象
復(fù)制代碼 代碼如下:
<?php
$data = <<<XML //定義 XML數(shù)據(jù)
<?xml version='1.0′?>
<departs>
<depart>
<name>production support</name>
<employees>
<employee>
<serial_no>100001</serial_no>
<name>Simon</name>
<age>24</age>
<birthday>1982-11-06</birthday>
<salary>5000.00</salary>
<bonus>1000.00</bonus>
</employee>
<employee>
<serial_no>100002</serial_no>
<name>Elaine</name>
<age>24</age>
<birthday>1982-01-01</birthday>
<salary>6000.00</salary>
<bonus>2000.00</bonus>
</employee>
</employees>
</depart>
<depart>
<name>testing center</name>
<employees>
<employee>
<serial_no>110001</serial_no>
<name>Helen</name>
<age>23</age>
<birthday>1983-07-21</birthday>
<salary>5000.00</salary>
<bonus>1000.00</bonus>
</employee>
</employees>
</depart>
</departs>
XML;
$xml = simplexml_load_string($data); //創(chuàng)建 SimpleXML對(duì)象
print_r($xml); //輸出 XML
?>

在上面的例子中,$data變量存儲(chǔ)了一段 XML數(shù)據(jù)。 simplexml_load_string函數(shù)將變量$data轉(zhuǎn)化成 SimpleXML對(duì)象。通過 print_r函數(shù)的輸出可以看出該對(duì)象的結(jié)構(gòu),運(yùn)行結(jié)果如下所示。
復(fù)制代碼 代碼如下:
SimpleXMLElement Object
(
[depart] => Array
(
[0] => SimpleXMLElement Object
(
[name] => production support
[employees] => SimpleXMLElement Object
( [employee] => Array (
[0] => SimpleXMLElement Object
( [serial_no] => 100001
[name] => Simon
[age] => 24
[birthday] => 1982-11-06
[salary] => 5000.00
[bonus] => 1000.00
)
[1] => SimpleXMLElement Object
( [serial_no] => 100002
[name] => Elaine
[age] => 24
[birthday] => 1982-01-01
[salary] => 6000.00
[bonus] => 2000.00
)
)
)
)
[1] => SimpleXMLElement Object
(
[name] => testing center
[employees] => SimpleXMLElement Object
(
[employee] => SimpleXMLElement Object
(
[serial_no] => 110001
[name] => Helen
[age] => 23
[birthday] => 1983-07-21
[salary] => 5000.00
[bonus] => 1000.00
)
)
)
)
)

從輸出結(jié)果可以看出,SimpleXML對(duì)象的結(jié)構(gòu)與 XML數(shù)據(jù)的格式完全相同。
第二種方法是使用 simplexml_load_flie函數(shù)讀取一個(gè) XML文件來(lái)完成創(chuàng)建的,其語(yǔ)法格式如下所示。
simplexml_load_file(string filename)
這里的 filename變量是用于存儲(chǔ) XML數(shù)據(jù)文件的文件名及其所在路徑。以下代碼使用 simplexml_load_file函數(shù)來(lái)創(chuàng)建了一個(gè) SimpleXML對(duì)象。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml'); //創(chuàng)建 SimpleXML對(duì)象
print_r($xml); //輸出 XML
?>

其中,example.xml存儲(chǔ)的數(shù)據(jù)與上面的$data完全相同,運(yùn)行結(jié)果也與上面完全相同。
上面兩種方法實(shí)現(xiàn)了同樣的功能,其區(qū)別就在于 XML的數(shù)據(jù)源不同。如果 XML的數(shù)據(jù)源在 php腳本文件中,則需要使用 simplexml_load_string來(lái)進(jìn)行創(chuàng)建。如果 XML的數(shù)據(jù)源在一個(gè)單獨(dú)的 XML文件中,則需要使用 simplexml_load_file來(lái)進(jìn)行創(chuàng)建。
2.2 讀取 SimpleXML對(duì)象中的 XML數(shù)據(jù)
前面介紹了使用 print_r函數(shù)來(lái)讀取 SimpleXML對(duì)象中的數(shù)據(jù),其返回結(jié)果與數(shù)組的結(jié)構(gòu)類似。顯然,這種顯示方式在實(shí)際應(yīng)用中是不可取的。在這里將介紹其他的幾種讀取 SimpleXML對(duì)象中 XML數(shù)據(jù)的方法。
1.var_dump函數(shù)顯示對(duì)象詳細(xì)信息
var_dump函數(shù)可以用于顯示 SimpleXML對(duì)象的詳細(xì)信息,與 print_r函數(shù)相比,var_dump函數(shù)顯示的信息更為完整,其語(yǔ)法如下所示。
void var_dump(object1, object2 … )
以下代碼使用 var_dump函數(shù)輸出了上面例子中對(duì)象的詳細(xì)信息。
復(fù)制代碼 代碼如下:
<?php $xml = simplexml_load_file('example.xml'); //創(chuàng)建 SimpleXML對(duì)象 var_dump($xml); //輸出 XML ?>

運(yùn)行結(jié)果如下所示。
復(fù)制代碼 代碼如下:
object(SimpleXMLElement)#1 (1) { ["depart"]=> array(2) {
[0]=>
object(SimpleXMLElement)#2 (2) {
["name"]=>
string(18) “production support”
["employees"]=>
object(SimpleXMLElement)#4 (1) {
["employee"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#5 (6) {
["serial_no"]=>
string(6) “100001″
["name"]=>
string(5) “Simon”
["age"]=>
string(2) “24″
["birthday"]=>
string(10) “1982-11-06″
["salary"]=>
string(7) “5000.00″
["bonus"]=>
string(7) “1000.00″
}
[1]=>
object(SimpleXMLElement)#6 (6) {
["serial_no"]=>
string(6) “100002″
["name"]=>
string(6) “Elaine”
["age"]=>
string(2) “24″
["birthday"]=>
string(10) “1982-01-01″
["salary"]=>
string(7) “6000.00″
["bonus"]=>
string(7) “2000.00″
}
}
}
}
[1]=>
object(SimpleXMLElement)#3 (2) {
["name"]=>
string(14) “testing center”
["employees"]=>
object(SimpleXMLElement)#7 (1) {
["employee"]=>
object(SimpleXMLElement)#8 (6) {
["serial_no"]=>
string(6) “110001″
["name"]=>
string(5) “Helen”
["age"]=>
string(2) “23″
["birthday"]=>
string(10) “1983-07-21″
["salary"]=>
string(7) “5000.00″
["bonus"]=>
string(7) “1000.00″
}}}}}

與前面 print_r輸出的結(jié)果相比較,var_dump函數(shù)的輸出結(jié)果的結(jié)構(gòu)更為嚴(yán)謹(jǐn),并且將對(duì)象中的每一個(gè)屬性的數(shù)據(jù)類型均作出分析。在實(shí)際應(yīng)用中,var_dump函數(shù)往往用于程序調(diào)試時(shí)的對(duì)象檢測(cè)。
2.讀取 XML數(shù)據(jù)中的標(biāo)簽
與操作數(shù)組類型的變量類似,讀取 XML也可以通過類似的方法來(lái)完成。例如,如果需要讀取上面 XML數(shù)據(jù)中每一個(gè)“ depart”標(biāo)簽下的“name”屬性,可以通過使用 foreach函數(shù)來(lái)完成,如以下代碼
所示。
復(fù)制代碼 代碼如下:
<?php $xml = simplexml_load_file('example.xml'); foreach($xml->depart as $a)
{
echo “$a->name <BR>”;
}
?>

運(yùn)行結(jié)果如下所示。
production support
testing center
//讀取 XML文件 //循環(huán)讀取 XML數(shù)據(jù)中的每一個(gè) depart標(biāo)簽
//輸出其中的 name屬性
也可以使用方括號(hào)“ []”來(lái)直接讀取 XML數(shù)據(jù)中指定的標(biāo)簽。以下代碼輸出了上面 XML數(shù)據(jù)中的第一個(gè)“depart”標(biāo)簽的“name”屬性。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml'); //讀取 XML文件
echo $xml->depart->name[0]; //輸出節(jié)點(diǎn)
?>

運(yùn)行結(jié)果如下所示。
production support
對(duì)于一個(gè)標(biāo)簽下的所有子標(biāo)簽,SimpleXML組件提供了 children方法進(jìn)行讀取。例如,對(duì)于上面的 XML數(shù)據(jù)中的“ depart”標(biāo)簽,其下包括兩個(gè)子標(biāo)簽:“ name”和“employees”。以下代碼實(shí)現(xiàn)了對(duì)第一個(gè)“depart”標(biāo)簽下的子標(biāo)簽的讀取。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml');
foreach ($xml->depart->children() as $depart) //循環(huán)讀取 depart標(biāo)簽下的子標(biāo)簽
{
var_dump($depart); //輸出標(biāo)簽的 XML數(shù)據(jù)
}
?>

運(yùn)行結(jié)果如下所示。
復(fù)制代碼 代碼如下:
object(SimpleXMLElement)#3 (1) {
[0]=>
string(18) “production support”
}
object(SimpleXMLElement)#5 (1) {
["employee"]=>
array(2) {
[0]=>
object(SimpleXMLElement)#3 (6) {
["serial_no"]=>
string(6) “100001″
["name"]=>
string(5) “Simon”
["age"]=>
string(2) “24″
["birthday"]=>
string(10) “1982-11-06″
["salary"]=>
string(7) “5000.00″
["bonus"]=>
string(7) “1000.00″
}
[1]=>
object(SimpleXMLElement)#6 (6) {
["serial_no"]=>
string(6) “100002″
["name"]=>
string(6) “Elaine”
["age"]=>
string(2) “24″
["birthday"]=>
string(10) “1982-01-01″
["salary"]=>
string(7) “6000.00″
["bonus"]=>
string(7) “2000.00″
}
}
}

可以看出,使用 children方法后,所有的子標(biāo)簽均被當(dāng)作一個(gè)新的 XML文件進(jìn)行處理。
3.基于 XML數(shù)據(jù)路徑的查詢
SimpleXML組件提供了一種基于 XML數(shù)據(jù)路徑的查詢方法。 XML數(shù)據(jù)路徑即從 XML的根到某一個(gè)標(biāo)簽所經(jīng)過的全部標(biāo)簽。這種路徑使用斜線“ /”隔開標(biāo)簽名。例如,對(duì)于上面的 XML數(shù)據(jù),要查詢所有的標(biāo)簽“name”中的值,從根開始要經(jīng)過 departs、depart、employees和 employee標(biāo)簽,則其路徑
為“/departs/depart/employees/employee/name”。 SimpleXML組件使用 xpath方法來(lái)解析路徑,其語(yǔ)法格式如下所示。
xpath(string path)
其中的 path為路徑。該方法返回了一個(gè)包含有所有要查詢標(biāo)簽值的數(shù)組。以下代碼查詢了上面 XML數(shù)據(jù)中的所有 name標(biāo)簽。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml'); //讀取 XML文件
$result = $xml->xpath('/departs/depart/employees/employee/name'); //定義節(jié)點(diǎn)
var_dump($result); //輸出節(jié)點(diǎn)
?>

運(yùn)行結(jié)果如下所示。
復(fù)制代碼 代碼如下:
array(3) {
[0]=> object(SimpleXMLElement)#2 (1) {
[0]=> string(5) “Simon”
}
[1]=> object(SimpleXMLElement)#3 (1) {
[0]=> string(6) “Elaine”
}
[2]=> object(SimpleXMLElement)#4 (1) {
[0]=> string(5) “Helen”
}
}

可以看出,所有的 name標(biāo)簽均被查詢出來(lái)。
2.3 XML數(shù)據(jù)的修改
對(duì)于 XML數(shù)據(jù)的修改與讀取 XML數(shù)據(jù)中的標(biāo)簽方法類似。即通過直接修改 SimpleXML對(duì)象中的標(biāo)簽的值來(lái)實(shí)現(xiàn)。以下代碼實(shí)現(xiàn)了對(duì)上面 XML數(shù)據(jù)中第一個(gè)“ depart”標(biāo)簽的“ name”子標(biāo)簽的修改。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml'); //讀取 XML
$xml->depart->name[0] = “Human Resource”; //修改節(jié)點(diǎn)
?>

修改后,并不會(huì)對(duì) XML文件有任何影響。但是,在程序中,對(duì)于 SimpleXML對(duì)象的讀取將使用修改過的值。
2.4 標(biāo)準(zhǔn)化 XML數(shù)據(jù)
SimpleXML還提供了一種標(biāo)準(zhǔn)化 XML數(shù)據(jù)的方法 asXML。asXML方法可以有效的將 SimpleXML對(duì)象中的內(nèi)容按照 XML 1.0標(biāo)準(zhǔn)進(jìn)行重新編排并以字符串的數(shù)據(jù)類型返回。以下代碼實(shí)現(xiàn)了對(duì)上面 XML數(shù)據(jù)的標(biāo)準(zhǔn)化。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml'); //讀取 XML數(shù)據(jù)
echo $xml->asXML(); //標(biāo)準(zhǔn)化 XML數(shù)據(jù)
?>

2.5 XML數(shù)據(jù)的存儲(chǔ)
將 SimpleXML對(duì)象中的 XML數(shù)據(jù)存儲(chǔ)到一個(gè) XML文件的方法非常簡(jiǎn)單,即將 asXML方法的返回結(jié)果輸出到一個(gè)文件中即可。以下代碼首先將 XML文件中的 depart name進(jìn)行了修改,然后將修改過的 XML數(shù)據(jù)輸出到另一個(gè) XML文件。
復(fù)制代碼 代碼如下:
<?php
$xml = simplexml_load_file('example.xml'); //讀取 XML數(shù)據(jù)
$newxml = $xml->asXML(); //標(biāo)準(zhǔn)化 XML數(shù)據(jù)
$fp = fopen(”newxml.xml”, “w”); //打開要寫入 XML數(shù)據(jù)的文件
fwrite($fp, $newxml); //寫入 XML數(shù)據(jù)
fclose($fp); //關(guān)閉文件
?>

代碼運(yùn)行后,可以看到在 newxml.xml文件中的 XML數(shù)據(jù)如下所示。
可以看出,對(duì)于 XML文件的修改已經(jīng)保存到輸出文件中了。
3 XML文檔的動(dòng)態(tài)創(chuàng)建
在實(shí)際應(yīng)用中,時(shí)而會(huì)需要?jiǎng)討B(tài)生成 XML文檔的操作。前面介紹的 SimpleXML組件并不提供創(chuàng)建 XML文檔的方法。因此,如果需要?jiǎng)討B(tài)創(chuàng)建 XML文檔,往往使用 DOM組件進(jìn)行創(chuàng)建。 DOM是文檔對(duì)象模型 Document Object Model的縮寫, DOM組件提供了對(duì) XML文檔的樹型解析模式。以下代碼使用 DOM組件創(chuàng)建了一個(gè) XML文檔。

復(fù)制代碼 代碼如下:
<?php
//創(chuàng)建一個(gè)新的 DOM文檔
$dom = new DomDocument();
//在根節(jié)點(diǎn)創(chuàng)建 departs標(biāo)簽
$departs = $dom->createElement('departs');
$dom->appendChild($departs);
//在 departs標(biāo)簽下創(chuàng)建 depart子標(biāo)簽
$depart = $dom->createElement('depart');
$departs->appendChild($depart);
//在 depart標(biāo)簽下創(chuàng)建 employees子標(biāo)簽
$employees = $dom->createElement('employees');
$depart->appendChild($employees);
//在 employees標(biāo)簽下創(chuàng)建 employee子標(biāo)簽
$employee = $dom->createElement('employee');
$employees->appendChild($employee);
//在 employee標(biāo)簽下創(chuàng)建 serial_no子標(biāo)簽
$serial_no = $dom->createElement('serial_no');
$employee->appendChild($serial_no);
//為 serial_no標(biāo)簽添加值節(jié)點(diǎn) 100001
$serial_no_value = $dom->createTextNode('100001′);
$serial_no->appendChild($serial_no_value);
//輸出 XML數(shù)據(jù)
echo $dom->saveXML();
?>
輸出結(jié)果如下所示。
<?xml version=”1.0″?>
<departs>
<depart>
<employees>
<employee>
<serial_no>100001</serial_no>
</employee>
</employees>
</depart>
</departs>

DOM組件除了可以用來(lái)動(dòng)態(tài)創(chuàng)建 XML文檔外,還可以用來(lái)讀取 XML文件。以下代碼實(shí)現(xiàn)了對(duì)前
面 XML文件的讀取。
復(fù)制代碼 代碼如下:
<?php
$dom = new DomDocument(); //創(chuàng)建 DOM對(duì)象
$dom->load('example.xml'); //讀取 XML文件
$root = $dom->documentElement; //獲取 XML數(shù)據(jù)的根
read_child($root); //調(diào)用 read_child函數(shù)讀取根對(duì)象
function read_child($node)
{
$children = $node->childNodes; //獲得$node的所有子節(jié)點(diǎn)
foreach($children as $e) //循環(huán)讀取每一個(gè)子節(jié)點(diǎn)
{
if($e->nodeType == XML_TEXT_NODE) //如果子節(jié)點(diǎn)為文本型則輸出
{
echo $e->nodeValue.”<BR>”;
}
else if($e->nodeType == XML_ELEMENT_NODE) //如果子節(jié)點(diǎn)為節(jié)點(diǎn)對(duì)象,則調(diào)用函數(shù)處理
{
read_child($e);
}
}
}
?>

運(yùn)行結(jié)果如下所示。
復(fù)制代碼 代碼如下:
引用
production support
100001
Simon
24
1982-11-06
5000.00
1000.00
100002
Elaine
24
1982-01-01
6000.00
2000.00
testing center
110001
Helen
23
1983-07-21
5000.00
1000.00

上面的例子使用了遞歸的方式對(duì) XML數(shù)據(jù)進(jìn)行了處理,實(shí)現(xiàn)了輸出 XML數(shù)據(jù)中的所有文本型標(biāo)簽的功能。
4 XML應(yīng)用實(shí)例――留言本
前面介紹了 XML的基本操作,本節(jié)將以設(shè)計(jì)一個(gè) XML留言本為例來(lái)詳細(xì)說明在實(shí)際應(yīng)用中如何實(shí)現(xiàn) php與 XML數(shù)據(jù)的交互操作。
4.1 XML文件結(jié)構(gòu)設(shè)計(jì)
XML文件用于存儲(chǔ) XML數(shù)據(jù),也就是留言本中的留言。這里,對(duì)于每條留言,在 XML數(shù)據(jù)中主要包括三項(xiàng)內(nèi)容:留言標(biāo)題、留言者姓名、留言內(nèi)容。因此,將 XML文件的格式設(shè)計(jì)如下。

復(fù)制代碼 代碼如下:
<?xml version=”1.0″?>
<threads>
<thread>
<title>這里是留言的標(biāo)題</title>
<author>這里是留言者</author>
<content>這里是留言內(nèi)容</content>
</thread>
</threads>

4.2 提交頁(yè)面的編寫
提交留言頁(yè)面由兩個(gè)頁(yè)面組成。一個(gè)是讓訪問者用來(lái)書寫留言的表單的 HTML文件,一個(gè)是用來(lái)處理訪問者輸入的 php腳本。表單的 HTML代碼如下所示。
復(fù)制代碼 代碼如下:
<html>
<head>
<title>發(fā)表新的留言</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
</head>
<body>
<H1><p align=”center”>發(fā)表新的留言</p></H1>
<form name=”form1″ method=”post” action=”Post.php”>
<table width=”500″ border=”0″ align=”center” cellpadding=”0″ cellspacing=”0″>
<tr>
<td>標(biāo)題</td>
<td><input name=”title” type=”text” id=”title” size=”50″></td>
</tr>
<tr>
<td>作者</td>
<td><input name=”author” type=”text” id=”author” size=”20″></td>
</tr>
<tr>
<td>內(nèi)容</td>
<td><textarea name=”content” cols=”50″ rows=”10″ id=”content”></textarea></td>
</tr>
</table>
<p align=”center”>
<input type=”submit” value=”Submit”>
<input type=”reset” value=”Reset”>
</p>
</form>
</body>
</html>

對(duì)于用來(lái)處理用戶輸入的 php腳本,其基本邏輯是首先創(chuàng)建一個(gè) DOM對(duì)象,然后讀取 XML文件中的 XML數(shù)據(jù),接下來(lái)在 XML對(duì)象上創(chuàng)建新的節(jié)點(diǎn)并將用戶的輸入儲(chǔ)存起來(lái),最后將 XML數(shù)據(jù)輸出到原來(lái)的 XML文件中。具體實(shí)現(xiàn)代碼如下所示。
復(fù)制代碼 代碼如下:
<?php
$guestbook = new DomDocument(); //創(chuàng)建一個(gè)新的 DOM對(duì)象
$guestbook->load('DB/guestbook.xml'); //讀取 XML數(shù)據(jù)
$threads = $guestbook->documentElement; //獲得 XML結(jié)構(gòu)的根
//創(chuàng)建一個(gè)新 thread節(jié)點(diǎn)
$thread = $guestbook->createElement('thread');
$threads->appendChild($thread);
//在新的 thread節(jié)點(diǎn)上創(chuàng)建 title標(biāo)簽
$title = $guestbook->createElement('title');
$title->appendChild($guestbook->createTextNode($_POST['title']));
$thread->appendChild($title);
//在新的 thread節(jié)點(diǎn)上創(chuàng)建 author標(biāo)簽
$author = $guestbook->createElement('author');
$author->appendChild($guestbook->createTextNode($_POST['author']));
$thread->appendChild($author);
//在新的 thread節(jié)點(diǎn)上創(chuàng)建 content標(biāo)簽
$content = $guestbook->createElement('content');
$content->appendChild($guestbook->createTextNode($_POST['content']));
$thread->appendChild($content);
//將 XML數(shù)據(jù)寫入文件
$fp = fopen(”DB/guestbook.xml”, “w”);
if(fwrite($fp, $guestbook->saveXML()))
echo “留言提交成功”;
else
echo “留言提交失敗”;
fclose($fp);
?>

在瀏覽器中運(yùn)行上述 HTML文件并填寫適當(dāng)?shù)牧粞詢?nèi)容,如圖 2所示。
 
圖 2 發(fā)表新留言界面
單擊【Submit】按鈕后,XML文件中的內(nèi)容如下所示。
可以看到 XML文件中已經(jīng)將留言存儲(chǔ)起來(lái)了。
4.3 顯示頁(yè)面的編寫
顯示頁(yè)面可以使用前面介紹的 SimpleXML組件很容易的實(shí)現(xiàn),具體實(shí)現(xiàn)代碼如下所示。
復(fù)制代碼 代碼如下:
<?php
//打開用于存儲(chǔ)留言的 XML文件
$guestbook = simplexml_load_file('DB/guestbook.xml');
foreach($guestbook->thread as $th) //循環(huán)讀取 XML數(shù)據(jù)中的每一個(gè) thread標(biāo)簽
{
echo “<B>標(biāo)題:</B>”.$th->title.”<BR>”;
echo “<B>作者:</B>”.$th->author.”<BR>”;
echo “<B>內(nèi)容:</B><PRE>”.$th->content.”</PRE>”;
echo “<HR>”;
}
?>


在瀏覽器中查看運(yùn)行結(jié)果如圖 3所示。
 

php技術(shù)PHP XML操作的各種方法解析(比較詳細(xì)),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 高雄县| 崇文区| 勃利县| 长沙县| 清涧县| 定边县| 四川省| 嘉定区| 册亨县| 西青区| 辉南县| 湟中县| 汤原县| 太和县| 华阴市| 清丰县| 芦溪县| 鹤庆县| 尼木县| 谢通门县| 如东县| 张家口市| 新河县| 沛县| 清苑县| 延安市| 新竹市| 宝兴县| 宁武县| 平武县| 金塔县| 从化市| 左贡县| 阿坝县| 莎车县| 甘南县| 孟连| 富平县| 轮台县| 罗甸县| 韶山市|