要操作的資料
<?xml version="1.0"?> <books> <book name="JavaScript: The Defiitive Guide" publisher="O'Reilly Media, Inc."> <author>David Flanagan</author> </book> <book name="PHP anf MySQL Web Development" publisher="Perason Education"> <author>Luke Welling</author> <author>Laura Thomson</author> </book> <book name="HTTP: The Defiitive Guide" publisher="O'Reilly Media, Inc."> <author>David Courley</author> <author>Brian Totty</author> </book> </books>
XML幾個基本概念
1、 節點:節點也就是很多程式語言中處理XML時的Node,節點是一個比較寬泛的概念,在XML中元素,屬性,名字空間,註釋,文字內容,處理指令,還有整個文件都屬於節點,也就是說XML文件中每個獨立的一小部分都是節點,
2、元素:很多程式語言都有對XML處理,節點是一個很廣泛的概念,因為要統一API,對節點不會有過多方法,而元素也就是Element是節點的一個子集,簡單講就是
3、屬性:這個比較好理解,在裡面的類似XX=”OO”等東西都是屬性節點
4、轉義字符:和HTML等類似,xml也有語言佔用的符號,想使用的這些特殊字符的時候需要轉義
DOMDocument對象
我使用的是DOMDocument對象來操作xml,感覺用起來比simpleXml科學一些,當然第一天使用php,純屬個人感覺。 DOMDocument有幾個常用的屬性和方法。
載入xml
$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.'<br/>'; } echo "AUTHOR: "; foreach ($book->getElementsByTagName('author') as $author) { echo $author->nodeValue.' '; } echo '<br/><br/>'; }
當然對於很多屬性,只想讀一個,可以透過item(index)方法按索引
強大的xpath查詢echo $book->attributes->item(1)->nodeValue;修改屬性/節點
还可以通过强大的xpath查询對屬性修改可以直接存取其nodeValue改動,也可以使用setAttribute方法,改動完了別忘了使用save保存。
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);新增元素/屬性
$book->setAttribute($attr->nodeName,strtoupper($attr->nodeValue)); $attr->nodeValue=strtoupper($attr->nodeValue);刪除屬性/節點
$newBook=$books->createElement('book'); #创建新元素 $newBook->setAttribute('name','PHP Objects, Patterns, and Practice');#创建新属性,方法一 $publisher=$books->createAttribute('publisher');#创建新属性,方法二 $publisher->nodeValue='Apress L.P'; $newBook->appendChild($publisher); #把属性添加到元素上 $author=$books->createElement('author');#创建子元素 $author->nodeValue='Matt Zandstra'; $newBook->appendChild($author);#把子元素添加到父元素上 $books->documentElement->appendChild($newBook);#添加整个节点 $books->save($path);更多php操作xml相關文章請追蹤PHP中文網!