/**
* PHPDOM主要用于增删改
* SimpleXML主要用于查询
*
*/
//设置头
header('content-type:text/html;charset=utf-8');
//实例化DOM对象
$doc = new DOCDocument('1.0','utf-8');
//加载XML文件
$doc -> load('lianxi.xml'); / 1$xml=simplexml_load_file('lianxi.xml');
//PHPDOM增删改都要找到其父节点
//$project = $doc -> getElementsByTagName('student') -> item(0);
//节点---增---先创建节点
$student = createmElement('student');
$name = createmElement('name','这是name的值');
$age = createmElement('age','这是age的值');
//节点---增---再连接
//$students = $doc ->getElementsByTagName('project') -> item(0) -> appendChild($student);//获取根节点,可以用documentElement
$students = documentElement -> appendChild($student ); //把$student放入根节点之下
$students -> appendChild($name);
$students -> appendChile($age);//然后保存
//属性---增
$student = $doc -> getElementsByTagName('student') -> item(1);//找到第二个人
$doc -> setAttribute('id','s103');//setAttribute('属性名','属性值')//然后保存
/******************************************************************************************************/
//节点---删---首先找到节点---然后修改
$project = $doc -> getElementsByTagName('student') -> item(0);//找到第一个人
$doc -> documentElement -> removeChild($project);//然后保存
//属性---删
$student = $doc -> getElementsByTagName('student') -> item(0);
$doc -> removeAttribute('id');//removeAttribute('属性名')//然后保存
/******************************************************************************************************/
//节点---改---于创建节点一样,不同之处在于,最后
$old_element = $doc -> getElementsBtTagName('student') -> item(0);
$student = createElement('student');
$name = createElement('name');
$age = createElement('age');
$students = documentElement -> appendChild($student);
$students -> appendChild($name);
$students -> appendChild($age);
//改和增的不同之处------用新节点替换原节点replaceChild('new','old');
$doc -> replaceChild($students,$old_element );
//属性---改
$old_element = $doc -> getElementsByTagName('student') -> item(0);
$old_element -> documentElement('student') -> setAttribute('id','s104');
/******************************************************************************************************/
/**
* simplexml
*/
//@遍历所有信息
$xml = simplexml_load_file('lianxi.xml');
for($i=0,$count=count($xml -> student);$i
echo $xml -> student[0] -> name;
echo $xml -> student[0] -> age;
echo '
';
}
//@获取所有节点($xml -> Children();)
$xml = simplexml_load_file('lianxi.xml');
foreach($xml -> Children() as $value){
echo $value -> name.' ' . $value -> age;
}
//@php中输出xml文档有两种形式,1、字符串连接。2、定界符。别忘了修改头文件(content-type:text/xml)
//@添加节点addChild()
$xml = simple_load_file('lianxi.xml');
$students = $xml -> addChild('student');
$students -> addChild('name','shi');
$students -> addChild('age','10000');
$xml -> asXML('lianxi.xml');
//@添加属性
$xml = simple_load_file('lianxi.xml');
$xml -> student[0] -> addAttribute('id','s105');//这个不能作为修改项
$xml -> asXML('lianxi.xml');
/******************************************************************************************************/
/**
* xpath是专门用于查询的语言
*/
//可以输出名( /斜线 )
$student = $xml -> xpath('/project/student');
echo $student[0] -> name;
//或---可以输出名
$student = $xml -> xpath('/project/student/name');
echo name[0];
//可以输出名 (// 斜线),不论层级关系,找到所有相匹配
$student = $xml -> xpath('//name');
echo $student[0];
//可以输出名 ( * 代替输出符合的)
$student = $xml -> xpath('/project/student/*');
foreach($student as $value){
echo $value;
}
//可以输出名,方块里可以进一步指定人名
$student = $xml -> spath('/project/student[2]/name');//输出第二个人的名字
echo $student[0];
//可以输出名,方块里可以进一步指定元素
$student = $xml -> xpath('/project/student[@id]');
for($i=0,$count=count($student);$i
echo $student[$i] -> name;
echo $student[$i] -> age;
echo '
';
}
//还有几种特殊用法
$student = $xml -> xpath("/project/student[name='张三']");//找到所有名为 ‘张三的人’
$student = $xml -> xpath("/project/student[age='28']");//找到所有年龄等于28的人
$student = $xml -> xpath("/project/student[age>'28']"); //找到所有年龄大于28的人
for($i=0,$count=count($student);$i
echo $student[0] -> name;
echo $student[0] -> age;
echo '
';
}
/******************************************************************************************************/
//保存
$doc -> save('lianxi.xml'); / 1$xml -> asXML('lianxi.xml');