解析php DOMElement 操作xml 文檔的實(shí)現(xiàn)代碼
/*<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- css的樣式定義,不加點(diǎn)。如:name{color:red;} -->
<?xml-stylesheet type="text/css" href="css.css"?>
<!-- 引入dtd文檔定義文件 (根元素:班級(jí))<!DOCTYPE 班級(jí) SYSTEM "class.dtd" /> -->
<!-- <!DOCTYPE 班級(jí)[
<!ELEMENT 班級(jí) (學(xué)生+)>
<!ELEMENT 學(xué)生 (名字,年齡,介紹)>
<!ELEMENT 名字 (#PCDATA)>
<!ELEMENT 年齡 (#PCDATA)>
<!ELEMENT 介紹 (#PCDATA)>
] /> -->
<班級(jí)>
<學(xué)生 number="101">
<名字>孫悟空</名字>
<名字>孫行者</名字>
<年齡>123</年齡>
<介紹><![CDATA[&*$%特殊字串^&#$&]]></介紹>
</學(xué)生>
<學(xué)生 number="10"2">
<名字>白骨精</名字>
<年齡>140</年齡>
<介紹>介紹內(nèi)容</介紹>
</學(xué)生>
</班級(jí)>
*/
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->load('datas.xml');
$itemsNodeList = $xmldoc->getElementsbyTagName('學(xué)生');
$itemElement = $itemsNodeList->item(0);//得到第一個(gè)完整的學(xué)生信息節(jié)點(diǎn)
$itemChildsNodeList = $itemElement->getElementsbyTagName('名字');//得到子節(jié)點(diǎn)“名字”,也許有多個(gè)名字
$itemChildNode = $itemChildsNodeList->item(0);//得到第一個(gè)名字節(jié)點(diǎn)
echo $itemChildNode->nodeValue;//輸出節(jié)點(diǎn)值
//封裝成函數(shù)
$nodeArr = array('名字', '年齡', '介紹');
function getNodeVal($xmldoc, $itemsName, $nodeArr){
$items = $xmldoc->getElementsByTagName($itemsName);
for($i=0; $i < $items->length; $i++){
$item = $items->item($i);
foreach($nodeArr as $node){
$data[$i][] = $item->getElementsByTagName($node)->item(0)->nodeValue;
}
}
return $data;
}
$data = getNodeVal($xmldoc, '學(xué)生', $nodeArr);
print_r($data);
//添加節(jié)點(diǎn)
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->load('datas.xml');
$items = $xmldoc->getElementsByTagName('班級(jí)')->item(0);//根節(jié)點(diǎn)
$student = $xmldoc->createElement('學(xué)生');//創(chuàng)建一個(gè)新的學(xué)生節(jié)點(diǎn)
$stu_name = $xmldoc->createElement('名字','張三');
$stu_age = $xmldoc->createElement('年齡','15');
$stu_intro = $xmldoc->createElement('介紹','動(dòng)手能力強(qiáng)且成績(jī)穩(wěn)定');
$items->appendChild($student);
$student->appendChild($stu_name);
$student->appendChild($stu_age);
$student->appendChild($stu_intro);
$bytes = $xmldoc->save('datas.xml');
echo ($bytes)? "寫(xiě)入了: $bytes 字節(jié)" : '保存失敗';
//刪除節(jié)點(diǎn)
$xmldoc = new DOMDocument('1.0', 'UTF-8');
$xmldoc->load('datas.xml');
$student = $xmldoc->getElementsByTagName('學(xué)生')->item(2);//直接找到要?jiǎng)h除的節(jié)點(diǎn)
$student->parentNode->removeChild($student);//父節(jié)點(diǎn)的刪除方法
$xmldoc->save('datas.xml');
//修改節(jié)點(diǎn)值
$student = $xmldoc->getElementsByTagName('學(xué)生')->item(2);
$student->getElementsByTagName('年齡')->item(0)->nodeValue += 10;
$student->setAttribute('id', '110');
$xmldoc->save('datas.xml');
//應(yīng)用 Xpath 查找節(jié)點(diǎn)
$xml = new DOMDocument('1.0', 'UTF-8');
$xml->load('dat.xml');
$xpath = new DOMXPath($xml);
$nodeList = $xpath->query('/aaa/bbb/ddd/fff');
echo $nodeList->item(0)->nodeValue;
//SimpleXML 類(lèi)操作 xml
/*
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book house="清華出版">
<code>1001</code>
<price>200元</price>
<author>大明</author>
<title>天龍八部</title>
</book>
<book house="北大出版">
<code>1002</code>
<price>321元</price>
<author>張三</author>
<title>笑傲江湖</title>
</book>
<book house="人 民出版">
<code>1004</code>
<price>182元</price>
<author>李四</author>
<title>讀者</title>
</book>
</books>
*/
$xml = simplexml_load_file('books.xml');
$books = $xml->book;
echo $books[1]->title . $books[1]['house'];//直接指向第二本書(shū)
foreach($xml as $item){
echo $item->title,' ',$item['house'],'<br/>';
}
- php解析html類(lèi)庫(kù)simple_html_dom(詳細(xì)介紹)
- PHP XML操作類(lèi)DOMDocument
- php中DOMDocument簡(jiǎn)單用法示例代碼(XML創(chuàng)建、添加、刪除、修改)
- PHP使用DOMDocument類(lèi)生成HTML實(shí)例(包含常見(jiàn)標(biāo)簽元素)
- PHP simple_html_dom.php+正則 采集文章代碼
- PHP 中 DOMDocument保存xml時(shí)中文出現(xiàn)亂碼問(wèn)題的解決方案
- php中使用DOM類(lèi)讀取XML文件的實(shí)現(xiàn)代碼
- PHP基于DOMDocument解析和生成xml的方法分析
- PHP 使用 DOM 解析器刪除指定a鏈接的方法實(shí)例分析
相關(guān)文章
PHP中strlen()和mb_strlen()的區(qū)別淺析
這篇文章主要介紹了PHP中strlen()和mb_strlen()的區(qū)別淺析,本文探討的中英混合的字符在使用這個(gè)函數(shù)時(shí)的區(qū)別,需要的朋友可以參考下2014-06-06PHP 閉包獲取外部變量和global關(guān)鍵字聲明變量的區(qū)別講解
閉包是一個(gè)常見(jiàn)的概念,我們通??梢詫⑵渑c回調(diào)函數(shù)配合使用,可以使代碼更加簡(jiǎn)潔易讀。這篇文章主要介紹了PHP 閉包獲取外部變量和global關(guān)鍵字聲明變量的區(qū)別,需要的朋友可以參考下2017-12-12PHP錯(cuò)誤Warning: Cannot modify header information - headers alr
這篇文章主要介紹了PHP錯(cuò)誤Warning: Cannot modify header information - headers already sent by解決方法,需要的朋友可以參考下2014-09-09PHP三元運(yùn)算的2種寫(xiě)法代碼實(shí)例
這篇文章主要介紹了PHP三元運(yùn)算的2種寫(xiě)法代碼實(shí)例,需要的朋友可以參考下2014-05-05PHP中的empty、isset、isnull的區(qū)別與使用實(shí)例
今天小編就為大家分享一篇關(guān)于PHP中的empty、isset、isnull的區(qū)別與使用實(shí)例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03Codeigniter的dom類(lèi)用法實(shí)例
這篇文章主要介紹了Codeigniter的dom類(lèi)用法,實(shí)例分析了基于Codeigniter的dom操作技巧,需要的朋友可以參考下2015-06-06php中使用session_set_save_handler()函數(shù)把session保存到MySQL數(shù)據(jù)庫(kù)實(shí)例
這篇文章主要介紹了php中使用session_set_save_handler()函數(shù)把session保存到MySQL數(shù)據(jù)庫(kù)實(shí)例,本文同時(shí)還給出了Session保存到Mysql數(shù)據(jù)庫(kù)存儲(chǔ)類(lèi),需要的朋友可以參考下2014-11-11