PHP解析xml

Posted 宝娟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP解析xml相关的知识,希望对你有一定的参考价值。

1.xml实例

test.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 班级 SYSTEM "test.dtd">
<!--<!DOCTYPE 班级 [
<!Element 班级 (学生+)>
<!Element 学生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
]>-->
<班级>
<学生>
//在CDATA中可以嵌入任何内容,包括图片。
//在默认情况下,只要符合书写语法,浏览器不会去检验是否符合逻辑,我们需要自己写代码测试。
<!--<name>悟空&quot;&apos;&lt;&gt;</name>
<![CDATA[<age>500><‘ ""</age>]]>-->
<name>悟空</name>
<age>500</age>
<sex>男</sex>
//人不可能有面积属性,不符合逻辑。
<面积>500</面积>
</学生>
<学生>
<name>白骨精</name>
<age>1000</age>
<sex>女</sex>
</学生>
</班级>

test.dtd

<!Element 班级 (学生+)>
<!Element 学生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>

checkDtd.html

<html>
<head>
<title>测试dtd</title>
<meta http-equiv="content-type"content="text/html;charset=utf-8"/>
<script type="text/javascript">
//创建一个xml解析器
var xmldoc=new ActiveXObject("Microsoft.XMLDOM");
//开启校验功能
xmldoc.validateOnParse=true;
//指定对哪一个xml文件进行校验
xmldoc.load("test.xml");
//如有错误,则输出
document.write("错误信息"+xmldoc.parseError.reason+"<br/>");
document.write("错误信息="+xmldoc.parseError.line+"<br/>");
</script>
</head>
</html>

此检测dtd的方法只适用于IE浏览器,是IE浏览器特有的属性,其他浏览器不支持。

2.php技术操作xml文件

  *php dom

  *php结合xpath操作xml

  *SimpleXml

//phpdom解析xml

test.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 班级 SYSTEM "test.dtd">
<!--<!DOCTYPE 班级 [
<!Element 班级 (学生+)>
<!Element 学生 (name,age,sex)>
<!Element name (#PCDATA)>
<!Element age (#PCDATA)>
<!Element sex (#PCDATA)>
]>-->
<班级>
<学生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</学生>
<学生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</学生>
<学生>
<name>0</name>
<age>25</age>
<sex>男</sex>
</学生>
</班级>

phpdom.php

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
//指定要处理的xml文件,加载xml文件
$xmldoc->load("test.xml");
//希望获取每一个学生的名字
$students=$xmldoc->getElementsByTagName("学生");
echo $students->length;
for($i=0;$i<$students->length;$i++){
        $node=$students->item($i);
        echo getNodeValue($node,"name")."<br/>";
        echo getNodeValue($node,"age")."<br/>";
        echo getNodeValue($node,"sex")."<br/>";
}
//$node=$students->item(0);
/*$list=$node->getElementsByTagName("name");
$list1=$list->item(0)->nodeValue;
echo $list1;*/
//echo getNodeValue($node,"age");
function getNodeValue(&$node,$tagName){
    return $node->getElementsByTagName($tagName)->item(0)->nodeValue;
}

?>
</html>

//增加节点的操作代码

addNode.php

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
//指定要处理的xml文件,加载xml文件
$xmldoc->load("test.xml");
//希望获取每一个学生的名字
$root=$xmldoc->getElementsByTagName("班级")->item(0);
//创建一个学生节点
$name=$xmldoc->createElement("学生");
//创建一个名字节点
$name1=$xmldoc->createElement("name");
//给名字节点赋值
$name1->nodeValue="鑫鑫";
//把名字节点挂载到学生节点之下
$name->appendChild($name1);
//创建年龄节点
$name2=$xmldoc->createElement("age");
//给年龄节点赋值
$name2->nodeValue="25";
//将年龄节点挂载到学生节点之下
$name->appendChild($name2);
//创建性别节点
$name3=$xmldoc->createElement("sex");
//给性别节点赋值
$name3->nodeValue="男";
//将性别节点挂载到学生节点之下
$name->appendChild($name3);
//最后将学生节点挂载到根节点班级之下
$root->appendChild($name);
//回写入xml文件
$xmldoc->save("test.xml");
?>
</html>

//删除节点的操作

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
$xmldoc->load("test.xml");
//获取根节点
$root=$xmldoc->getElementsByTagName("班级")->item(0);
//要删除第3个学生
//获取学生节点
$students=$xmldoc->getElementsByTagName("学生");
//获取第三个学生
$stu1=$students->item(0);
//删除第三个学生
//$root->removeChild($stu1);
$stu1->parentNode->removeChild($stu1);
$xmldoc->save("test.xml");
echo "删除成功";
?>
</html>

//更新节点内容的操作

<html>
<head>
<meta http-equiv="content-type"content="text/html charset=utf-8"/>
</head>
<?php
//获取Domdocument对象。
$xmldoc=new DOMDocument();
$xmldoc->load("test.xml");
//获取学生节点
$student=$xmldoc->getElementsByTagName("学生")->item(0);
//获取第三个学生
$stu_name=$student->getElementsByTagName("name")->item(0);
//更新文本的值
$stu_name->nodeValue+="八戒";
$xmldoc->save("test.xml");
echo "更新成功";
?>
</html>

与Java解析xml相比之下,利用PHP解析xml要简单一些,更容易让人理解。

今日暂时分享于此。明日继续。

革命尚未成功,同志仍需努力!

 
















































































































































































以上是关于PHP解析xml的主要内容,如果未能解决你的问题,请参考以下文章

php 输出 xml 产生解析错误“'”

php如何解析多级xml报文?

PHP XML Expat 解析器

php 如何解析xml格式字符串

雷林鹏分享:PHP XML Expat 解析器

PHP XML 解析