詳解PHP使用DOMDocument類遍歷、增加、修改、刪除XML節點操作


DomDocument object model)文檔-對象-模型,核心思想是把一個Xml文件看成一個對象模型,然后通過對象的方式來操作Xml文件。我們先總結出DOM對象的屬性方法,在分別用案例說明其應用!

DOMDocument 屬性:

Attributes存儲節點的屬性列表(只讀)

childNodes存儲節點的子節點列表(只讀)

dataType返回此節點的數據類型

DefinitionDTDXML模式給出的節點的定義(只讀)

Doctype 指定文檔類型節點(只讀)

documentElement返回文檔的根元素(可讀寫)

firstChild返回當前節點的第一個子節點(只讀)

Implementation返回XMLDOMImplementation對象

lastChild返回當前節點最后一個子節點(只讀)

nextSibling返回當前節點的下一個兄弟節點(只讀)

nodeName返回節點的名字(只讀)

nodeType返回節點的類型(只讀)

nodeTypedValue存儲節點值(可讀寫)

nodeValue返回節點的文本(可讀寫)

ownerDocument返回包含此節點的根文檔(只讀)

parentNode返回父節點(只讀)

Parsed 返回此節點及其子節點是否已經被解析(只讀)

Prefix 返回名稱空間前綴(只讀)

preserveWhiteSpace指定是否保留空白(可讀寫)

previousSibling返回此節點的前一個兄弟節點(只讀)

Text 返回此節點及其后代的文本內容(可讀寫)

url 返回最近載入的XML文檔的URL(只讀)

Xml 返回節點及其后代的XML表示(只讀)

 

DOMDocument 方法:

appendChild為當前節點添加一個新的子節點,放在最后的子節點后

cloneNode返回當前節點的拷貝

createAttribute創建新的屬性

createCDATASection創建包括給定數據的CDATA

createComment創建一個注釋節點

createDocumentFragment創建DocumentFragment對象

createElement_x創建一個元素節點

createEntityReference創建EntityReference對象

createNode創建給定類型,名字和命名空間的節點

createPorcessingInstruction創建操作指令節點

createTextNode創建包括給定數據的文本節點

getElementsByTagName返回指定名字的元素集合

hasChildNodes返回當前節點是否有子節點

insertBefore在指定節點前插入子節點

Load 導入指定位置的XML文檔

loadXML 導入指定字符串的XML文檔

removeChild從子結點列表中刪除指定的子節點

replaceChild從子節點列表中替換指定的子節點

Save XML文件存到指定節點

selectNodes對節點進行指定的匹配,並返回匹配節點列表

selectSingleNode對節點進行指定的匹配,並返回第一個匹配節點

transformNode使用指定的樣式表對節點及其后代進行轉換

 

1、創建一個Xml文件

<?php

    //實例化一個DomDocument對象

    $dom = new DomDocument('1.0', 'UTF-8');

    //如果文件不存在就創建一個

    if(!file_exists("xml_test.xml")){

           header("Content-Type:text/plain");

           $root= $dom->createElement("class");

           $dom->appendChild($root);

           $dom->save("xml_test.xml");

    } else{

           $dom->load("xml_test.xml"); 

    }

    print$dom->saveXML();

?>

 

2、增加元素

<?php

    //addElementsxml.php

    $dom = new DOMDocument("1.0","UTF-8");

   

    $dom->load("xml_test.xml");

   

    $root_class =$dom->getElementsByTagName("class");

    $i = 0;

   // for($i = 0;$i < 4; $i++){

           $root_class_node =$root_class->item($i);

           $stu_node=$dom->createElement("student");

           $stu_node->setAttribute("xingbie","man");

           $stu_node_name=$dom->createElement("name","name".$i);

           //設置屬性

           $stu_node_name->setAttribute("hel","23");

           $stu_node_age=$dom->createElement("age","21");

           $stu_node_introduce=$dom->createElement("introduce","1111");

           $stu_node->appendChild($stu_node_name);

           $stu_node->appendChild($stu_node_age);

           $stu_node->appendChild($stu_node_introduce);

           $root_class_node->appendChild($stu_node);

   // }

    $dom->save("xml_test.xml");

    print $dom->saveXML();

?>

 

3、遍歷元素

<?php

    //getNode.php

    //解析一個文件的步驟

    //1創建一個對象,表示文檔

    $dom = new DOMDocument("1.0","UTF-8");

    //2制定加載那個Xml,解析那個文件

    $dom->load("xml_test.xml");

    //3 獲取你關新節點

    $stu_nodes =$dom->getElementsByTagName("student");

   

    for ($i=0;$i<$stu_nodes->length;$i++){

           //取出每個學生

           $stu_node= $stu_nodes->item($i);

           for($i=0;$i<$stu_node->childNodes->length;$i++){

               echo$stu_node->childNodes->item($i)->nodeValue;

               echo "<br/>";

           }

    }

?>

 

4、刪除元素

<?php

    //解析一個文件的步驟

    //1創建一個對象,表示文檔

    $dom = new DOMDocument("1.0","UTF-8");

    //2制定加載那個Xml,解析那個文件

    $dom->load("xml_test.xml");

    //3 獲取你關新節點

    $stu_nodes =$dom->getElementsByTagName("student");

   $stu_node=$stu_nodes->item($stu_nodes->length -1);

    $stu_node->parentNode->removeChild($stu_node);

   

    $dom->save("xml_test.xml");

 ?>

5、修改元素屬性

<?php

    //1創建一個對象,表示文檔

    $dom = new DOMDocument("1.0","UTF-8");

    //2制定加載那個Xml,解析那個文件

    $dom->load("xml_test.xml");

   

    //找到這個學生

    $stus=$dom->getElementsByTagName("age")->item(0);

    $stus->nodeValue=100;

   

    $dom->save("xml_test.xml");

    ?>

 

 

制作人:飛虎                                             無兄弟不編程!
=====================================================================================
歡迎加QQ群進行更多交流:305397511     專注於php、mysql、jquery以及開源框架


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM