PHP操作XML整理
时间:2009-05-22 来源:hkebao
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style> </style>
<?php
$hostname = "localhost";
$usr = "root";
$pw = "321";
$dbname = "db";
$id = $_GET["id"];
echo "<?xml version='1.0' encoding='gbk' ?>";
if(!is_numeric($id)){
echo "<error><![CDATA[传入参数有问题。 ]]></error>";
exit;
}
$sql = "select * from host where id=".$id;
$link = mysql_connect($hostname,$usr,$pw);
if(!$link){
echo "<error><![CDATA[数据库连接异常!请检查数据库连接 ]]></error>";
exit;
}else{
mysql_query("set names gb2312");
mysql_select_db($dbname,$link);
$result = mysql_query($sql,$link);
if(mysql_num_rows($result) == 0) {
echo "<error><![CDATA[数据库没有信息]]></error>";
die();
} else {
$str = "";
while($row = mysql_fetch_array($result)) {
$id = Trim($row["id"]);
$host = Trim($row["host"]);
$str = $str."<row>";
$str = $str."<id>"."<![CDATA[".$id."]]></id>";
$str = $str."<host>"."<![CDATA[".$host."]]></host>";
$str = $str."</row>";
}
echo $str;
}
}
mysql_free_result($result);
mysql_close($link);
?>
2.PHP读取XML数据文件并解析出来项中的数据<meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="ProgId" content="Word.Document"><meta name="Generator" content="Microsoft Word 11"><meta name="Originator" content="Microsoft Word 11"><link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml"><style> </style>
<?php
$doc = new DOMDocument();
$doc->load( 'http://192.168.100.40:806/MyPhp/MyDB.php?id=2' ); 请求的URL包含XML
$books = $doc->getElementsByTagName( "row" );
foreach( $books as $book ) { //遍历全部的数组数据
$authors = $book->getElementsByTagName( "id" );
$author = $authors->item(0)->nodeValue;
$publishers = $book->getElementsByTagName( "host" );
$publisher = $publishers->item(0)->nodeValue;
echo "$publisher - $author \n";
}
附:另一种方法解析 不过没有成功 先贴代码
<?php
/****************************************
*采用parse方法进行解析调用PHP内置的函数
*整理总结
parser是php内置的一个用来处理xml的解析器,它的工作由三个事件组成:
起始标签、 读取数据、结束标签。
也就是说在对xml进行处理的时候每当遇到起始标签、
数据和结束标签的时候函数会做相应的动作来完成对xml数据的转换。
******************************************/
?>
<?php
//开始定义好解析函数
$name = false;
$position = false;
function startElemnt($parser_instance,$element_name,$attrs) {
//处理起始标签事件函数
global $name,$position;
if($element_name == "name") { //表示标签如果是NAME则如下处理
$name = true;
$position = false;
echo "名字";
}
if($element_name == "position") {
$name = false;
$position = true;
echo "位置";
}
}
function characterData($parser_instance,$xml_data) {
//读取数据时的函数
global $name,$position;
if($position)
//因为之前调用过了标签开始处理函数会处理全局的变量值的
echo $xml_data."<br>";
if($name)
echo $xml_data."<br>";
}
function endElement($parser_instance,$element_name){
global $name,$position;
$name = false;
$position = false;
}
$parser = xml_parser_create(); //创建一个parser解析器
xml_set_element_handler($parser,"startElement","endElement");//设立标签触发函数
//我的理解:<error>2</error> 程序遇到了error的时候就触发startElement函数
xml_set_character_data_handler($parser,"characterData");
//我的理解:<error>2</error> 程序遇到了里面的2时如何进行读取操作
$xml_file = "1.xml";
$filehandler= fopen($xml_file,"r"); //打开XML文件
while($data = fread($filehandler,9999)){
try{
if(!xml_parse($parser,$data,feof($filehandler))){
die(sprintf("xml error:%s at line %d",xml_error_string(xml_get_error_code($parser)),xml_get_current_line_number($parser)));
}
}catch(Exception $e){
echo "异常信息:".$e->getMessage();
}
}
//我的理解:开始解析此XML文档 每次取4096个字节处理
fclose($filehandler);
xml_parser_free($parser); //关闭解析器
?>
提示 有问题出现的。打不到事件处理函数 !郁闷呀