php操作xml

Dec 24, 2016 am 11:09 AM

要操作的資料

<?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

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

XML修改屬性值有何限制 XML修改屬性值有何限制 Mar 03, 2025 pm 05:32 PM

XML修改屬性值有何限制

如何使用RSS feed進行新聞匯總和內容策劃? 如何使用RSS feed進行新聞匯總和內容策劃? Mar 10, 2025 pm 03:47 PM

如何使用RSS feed進行新聞匯總和內容策劃?

XML如何修改大型XML文件 XML如何修改大型XML文件 Mar 03, 2025 pm 05:31 PM

XML如何修改大型XML文件

XML修改內容會影響性能嗎 XML修改內容會影響性能嗎 Mar 03, 2025 pm 05:27 PM

XML修改內容會影響性能嗎

如何使用RSS實施內容聯合? 如何使用RSS實施內容聯合? Mar 10, 2025 pm 03:41 PM

如何使用RSS實施內容聯合?

如何集成XML和語義Web技術? 如何集成XML和語義Web技術? Mar 10, 2025 pm 05:50 PM

如何集成XML和語義Web技術?

如何將XML用於醫療保健/財務/等的數據互操作性? 如何將XML用於醫療保健/財務/等的數據互操作性? Mar 10, 2025 pm 05:50 PM

如何將XML用於醫療保健/財務/等的數據互操作性?

如何保護RSS提要,以防止未經授權的訪問? 如何保護RSS提要,以防止未經授權的訪問? Mar 10, 2025 pm 03:42 PM

如何保護RSS提要,以防止未經授權的訪問?

See all articles