首頁  >  文章  >  後端開發  >  php操作xml

php操作xml

高洛峰
高洛峰原創
2016-12-24 11:09:251791瀏覽

要操作的資料

<?xml version="1.0"?>
<books>
    <book name="JavaScript: The Defiitive Guide" publisher="O&#39;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&#39;Reilly Media, Inc.">
        <author>David Courley</author>
        <author>Brian Totty</author>
    </book>
</books>

XML幾個基本概念
1、 節點:節點也就是很多程式語言中處理XML時的Node,節點是一個比較寬泛的概念,在XML中元素,屬性,名字空間,註釋,文字內容,處理指令,還有整個文件都屬於節點,也就是說XML文件中每個獨立的一小部分都是節點,是,也是,name=”XXXX」也是,標籤是,甚至作者的名字David Flanagan都是一個文本節點。
2、元素:很多程式語言都有對XML處理,節點是一個很廣泛的概念,因為要統一API,對節點不會有過多方法,而元素也就是Element是節點的一個子集,簡單講就是這樣的標籤才算,一般會有很多針對元素的操作方法。
3、屬性:這個比較好理解,在裡面的類似XX=”OO”等東西都是屬性節點
4、轉義字符:和HTML等類似,xml也有語言佔用的符號,想使用的這些特殊字符的時候需要轉義

php操作xml

DOMDocument對象
我使用的是DOMDocument對象來操作xml,感覺用起來比simpleXml科學一些,當然第一天使用php,純屬個人感覺。 DOMDocument有幾個常用的屬性和方法。

php操作xml

載入xml

$path=$_SERVER["DOCUMENT_ROOT"].&#39;/books.xml&#39;;
    $books=new DOMDocument();
    $books->load($path);

讀取/遍歷節點與屬性

$bookElements=$books->getElementsByTagName(&#39;book&#39;);
    foreach($bookElements as $book){
        foreach ($book->attributes as $attr) {
            echo strtoupper($attr->nodeName).&#39; —— &#39;.$attr->nodeValue.&#39;<br/>&#39;;
        }
        echo "AUTHOR: ";
        foreach ($book->getElementsByTagName(&#39;author&#39;) as $author) {
            echo $author->nodeValue.&#39; &#39;;
        }
        echo &#39;<br/><br/>&#39;;
    }

php操作xml

當然對於很多屬性,只想讀一個,可以透過item(index)方法按索引

強大的xpath查詢

echo $book->attributes->item(1)->nodeValue;

修改屬性/節點

还可以通过强大的xpath查询

php操作xml

對屬性修改可以直接存取其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(&#39;author&#39;) 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(&#39;book&#39;); #创建新元素
    $newBook->setAttribute(&#39;name&#39;,&#39;PHP Objects, Patterns, and Practice&#39;);#创建新属性,方法一
    $publisher=$books->createAttribute(&#39;publisher&#39;);#创建新属性,方法二
    $publisher->nodeValue=&#39;Apress L.P&#39;;
    $newBook->appendChild($publisher); #把属性添加到元素上
    $author=$books->createElement(&#39;author&#39;);#创建子元素
    $author->nodeValue=&#39;Matt Zandstra&#39;;
    $newBook->appendChild($author);#把子元素添加到父元素上
    $books->documentElement->appendChild($newBook);#添加整个节点
    $books->save($path);

php操作xml

更多php操作xml相關文章請追蹤PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn