本文小編為大家詳細(xì)介紹“怎么使用php操作xml”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“怎么使用php操作xml”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了遵化免費(fèi)建站歡迎大家使用!
最近計(jì)劃寫(xiě)個(gè)人的小網(wǎng)站,一系列原因選擇了用php來(lái)寫(xiě),最大的問(wèn)題就是雖然php很流行,但我從來(lái)沒(méi)有接觸過(guò)php,看了一個(gè)多星期的基本語(yǔ)法后做些小練習(xí)熱熱身,但是期間是各種問(wèn)題啊,主要是對(duì)php不熟悉,遇到一些總結(jié)一些吧。
David Flanagan Luke Welling Laura Thomson David Courley Brian Totty
節(jié)點(diǎn):節(jié)點(diǎn)也就是很多程序語(yǔ)言中處理XML時(shí)的Node,節(jié)點(diǎn)是一個(gè)比較寬泛的概念,在XML中元素,屬性,名字空間,注釋?zhuān)谋緝?nèi)容,處理指令,還有整個(gè)文檔都屬于節(jié)點(diǎn),也就是說(shuō)XML文檔中每個(gè)獨(dú)立的一小部分都是節(jié)點(diǎn),是,也是,name=”XXXX”也是,標(biāo)簽是,甚至作者的名字David Flanagan都是一個(gè)文本節(jié)點(diǎn)。
元素:很多程序語(yǔ)言都有對(duì)XML處理,節(jié)點(diǎn)是一個(gè)很寬泛的概念,因?yàn)橐y(tǒng)一API,對(duì)節(jié)點(diǎn)不會(huì)有過(guò)多方法,而元素也就是Element是節(jié)點(diǎn)的一個(gè)子集,簡(jiǎn)單講就是這樣的標(biāo)簽才算,一般會(huì)有很多針對(duì)元素的操作方法。
屬性:這個(gè)比較好理解,在<>里面的類(lèi)似XX=”O(jiān)O”等東西都是屬性節(jié)點(diǎn)
轉(zhuǎn)義字符:和HTML等類(lèi)似,xml也有語(yǔ)言占用的符號(hào),想使用的這些特殊字符的時(shí)候需要轉(zhuǎn)義
< | < |
> | > |
& | & |
‘ | ' |
“ | " |
我使用的是DOMDocument對(duì)象來(lái)操作xml,感覺(jué)用起來(lái)比simpleXml科學(xué)一些,當(dāng)然第一天使用php,純屬個(gè)人感覺(jué)。DOMDocument有幾個(gè)常用的屬性和方法。
屬性 | 作用 |
attributes | 節(jié)點(diǎn)屬性集合 |
parentNode | 節(jié)點(diǎn)父節(jié)點(diǎn) |
documentElement | 文檔根節(jié)點(diǎn) |
nodeName | 節(jié)點(diǎn)的名字 |
nodeType | 節(jié)點(diǎn)類(lèi)型 |
nodeValue | 節(jié)點(diǎn)值 |
Text | 節(jié)點(diǎn)及其子節(jié)點(diǎn)轉(zhuǎn)換為文字 |
方法 | 作用 |
appendChild | 為節(jié)點(diǎn)添加子節(jié)點(diǎn) |
createAttribute | 創(chuàng)建屬性節(jié)點(diǎn) |
createElement | 創(chuàng)建元素 |
getElementsByTagName | 通過(guò)節(jié)點(diǎn)名獲取節(jié)點(diǎn)集合 |
hasChildNodes | 判斷節(jié)點(diǎn)是否有子節(jié)點(diǎn) |
insertBefore | 在節(jié)點(diǎn) |
Load | 通過(guò)文檔路徑加載xml |
loadXML | 加載zml字符串 |
removeChild | 刪除子節(jié)點(diǎn) |
removeAttribute | 刪除屬性節(jié)點(diǎn) |
save | 保存文檔 |
$path=$_SERVER["DOCUMENT_ROOT"]."/books.xml"; $books=new DOMDocument(); $books->load($path);
$bookElements=$books->getElementsByTagName("book"); foreach($bookElements as $book){ foreach ($book->attributes as $attr) { echo strtoupper($attr->nodeName)." ―― ".$attr->nodeValue."
"; } echo "AUTHOR: "; foreach ($book->getElementsByTagName("author") as $author) { echo $author->nodeValue."?"; } echo "
"; }
當(dāng)然對(duì)于很多屬性,只想讀一個(gè),可以通過(guò)item(index)方法按索引讀取
echo $book->attributes->item(1)->nodeValue;
還可以通過(guò)強(qiáng)大的xpath查詢(xún)
$xpath = new domxpath($books); $bookElements=$xpath->query("/books/book");
foreach($bookElements as $book){ foreach ($book->attributes as $attr) { #$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue)); $attr->nodeValue=strtoupper($attr->nodeValue); } echo "AUTHOR: "; foreach ($book->getElementsByTagName("author") as $author) { $author->nodeValue=strtoupper($author->nodeValue); } } $books->save($path);
對(duì)屬性修改可以直接訪問(wèn)其nodeValue改動(dòng),也可以使用setAttribute方法,改動(dòng)完了別忘了使用save保存。
$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue)); $attr->nodeValue=strtoupper($attr->nodeValue);
$newBook=$books->createElement("book"); #創(chuàng)建新元素 $newBook->setAttribute("name","PHP Objects, Patterns, and Practice");#創(chuàng)建新屬性,方法一 $publisher=$books->createAttribute("publisher");#創(chuàng)建新屬性,方法二 $publisher->nodeValue="Apress L.P"; $newBook->appendChild($publisher); #把屬性添加到元素上 $author=$books->createElement("author");#創(chuàng)建子元素 $author->nodeValue="Matt Zandstra"; $newBook->appendChild($author);#把子元素添加到父元素上 $books->documentElement->appendChild($newBook);#添加整個(gè)節(jié)點(diǎn) $books->save($path);
$first=$bookElements->item(0); $first->removeAttribute("publisher"); $second=$bookElements->item(1); $second->parentNode->removeChild($second); $books->save($path);
讀到這里,這篇“怎么使用php操作xml”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。