溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何在php中利用DOMElement對(duì)xml文檔進(jìn)行操作

發(fā)布時(shí)間:2021-01-27 15:43:10 來源:億速云 閱讀:174 作者:Leah 欄目:開發(fā)技術(shù)

如何在php中利用DOMElement對(duì)xml文檔進(jìn)行操作?相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

代碼如下:


/*<?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&quot;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);

復(fù)制代碼 代碼如下:


//添加節(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)且成績穩(wěn)定');
$items->appendChild($student);
$student->appendChild($stu_name);
$student->appendChild($stu_age);
$student->appendChild($stu_intro);
$bytes = $xmldoc->save('datas.xml');
echo ($bytes)? "寫入了: $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 類操作 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'];//直接指向第二本書
foreach($xml as $item){
    echo $item->title,' ',$item['house'],'<br/>';
}

看完上述內(nèi)容,你們掌握如何在php中利用DOMElement對(duì)xml文檔進(jìn)行操作的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI