DOMElement 操作 xml 文档

/*<?xml version="1.0" encoding="UTF-8" standalone="no"?>

 <!-- css的样式定义,不加点。如:name{color:red;} -->

<?xml-stylesheet type="text/css" href="css.css"?>

<!-- 引入dtd文档定义文件 (根元素:班级)<!DOCTYPE 班级 SYSTEM "class.dtd" /> -->

<!-- <!DOCTYPE 班级[

<!ELEMENT 班级 (学生+)>

<!ELEMENT 学生 (名字,年龄,介绍)>

<!ELEMENT 名字 (#PCDATA)>

<!ELEMENT 年龄 (#PCDATA)>

<!ELEMENT 介绍 (#PCDATA)>

] /> -->

<班级>

<学生 number="101">

<名字>孙悟空</名字>

<名字>孙行者</名字>

<年龄>123</年龄>

<介绍><![CDATA[&*$%特殊字串^&#$&]]></介绍>

</学生>



<学生 number="10&quot;2">

<名字>白骨精</名字>

<年龄>140</年龄>

<介绍>介绍内容</介绍>

</学生>

</班级>

*/

$xmldoc = new DOMDocument('1.0', 'UTF-8');

$xmldoc->load('datas.xml');



$itemsNodeList = $xmldoc->getElementsbyTagName('学生');

$itemElement = $itemsNodeList->item(0);//得到第一个完整的学生信息节点

$itemChildsNodeList = $itemElement->getElementsbyTagName('名字');//得到子节点“名字”,也许有多个名字

$itemChildNode = $itemChildsNodeList->item(0);//得到第一个名字节点

echo $itemChildNode->nodeValue;//输出节点值



//封装成函数

$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, '学生', $nodeArr);

print_r($data);
//添加节点

$xmldoc = new DOMDocument('1.0', 'UTF-8');

$xmldoc->load('datas.xml');

$items = $xmldoc->getElementsByTagName('班级')->item(0);//根节点

$student =  $xmldoc->createElement('学生');//创建一个新的学生节点

$stu_name = $xmldoc->createElement('名字','张三');

$stu_age = $xmldoc->createElement('年龄','15');

$stu_intro = $xmldoc->createElement('介绍','动手能力强且成绩稳定');

$items->appendChild($student);

$student->appendChild($stu_name);

$student->appendChild($stu_age);

$student->appendChild($stu_intro);

$bytes = $xmldoc->save('datas.xml'); 

echo ($bytes)? "写入了: $bytes 字节" : '保存失败';



//删除节点

$xmldoc = new DOMDocument('1.0', 'UTF-8');

$xmldoc->load('datas.xml');

$student = $xmldoc->getElementsByTagName('学生')->item(2);//直接找到要删除的节点

$student->parentNode->removeChild($student);//父节点的删除方法

$xmldoc->save('datas.xml');



//修改节点值

$student = $xmldoc->getElementsByTagName('学生')->item(2);

$student->getElementsByTagName('年龄')->item(0)->nodeValue += 10;

$student->setAttribute('id', '110');

$xmldoc->save('datas.xml');



//应用 Xpath 查找节点



$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/>';

}

 

你可能感兴趣的:(element)