php读写xml文件的方法介绍

发布时间:2020-08-28编辑:脚本学堂
php可以方便的生成和读取xml文件。主要通过DOMDocument、DOMElement和DOMNodeList来完成XML的读取与写入操作。

php读写xml文件时,常用到如下的几行:
 

复制代码 代码如下:
header("content-type:text/html; charset=utf-8"); //指定PHP使用UTF-8编码
$xml = simplexml_load_file("example.xml"); //读取xml文件
$newxml = $xml->asXML(); //标准化$xml
$fp = fopen("newxml.xml", "w"); //新建xml文件
fwrite($fp, $newxml); //写入-------xml文件
fclose($fp);

php可以方便的生成和读取xml文件。
主要通过DOMDocument、DOMElement和DOMNodeList来完成XML的读取与写入操作。

下面为大家介绍如何使用这些类,供大家学习参考。

一.生成XML文件
对于一个如下XML文件。
 

复制代码 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<article>
<title>PHP访问mysql/ target=_blank class=infotextkey>mysql数据库 初级篇</title>
<link>http://blog.csdn.net/morewindows/article/details/7102362</link>
</article>
<?xml version="1.0" encoding="UTF-8"?>
<article>
<title>PHP访问Mysql数据库 初级篇</title>
<link>http://blog.csdn.net/morewindows/article/details/7102362</link>
</article>

我们来看看如何用PHP来生成:

首先new一个DOMDocument对象并设置编码格式。
 

复制代码 代码如下:
$dom = newDOMDocument('1.0', 'UTF-8');
$dom->formatOutput= true;

再创建<article>结点和<title>结点
 

复制代码 代码如下:
$rootelement =$dom->createElement("article");
$title =$dom->createElement("title", "PHP访问MySql数据库 初级篇");

然后创建带文本内容的<link>结点
 

复制代码 代码如下:
$link =$dom->createElement("link","http://blog.csdn.net/morewindows/article/details/7102362");

也可以先生成<link>结点再为其添加文本内容。
 

复制代码 代码如下:
$link = $dom->createElement("link");
$linktext =$dom->createTextNode('http://blog.csdn.net/morewindows/article/details/7102362');
$link->appendChild($linktext);

然后将<title>和<link>结点加入到<article>结点中去
 

复制代码 代码如下:
$rootelement->appendChild($title);
$rootelement->appendChild($link);

最后将<article>结点加入到DOMDocument对象中,
 

复制代码 代码如下:
$dom->appendChild($rootelement);

这样一个完整的XML就生成完毕了。再整出整个XML,
 

复制代码 代码如下:
echo $dom->saveXML() ;

saveXML()也可以只输入部分XML文本,如echo $dom->saveXML($link);就只会输出<link>结点:<link>http://blog.csdn.net/morewindows/article/details/7102362</link>

下面再给出一个完整的PHP中数据内容输出到XML文件的例子。该例子会对将一个php数组输出到XML文件中。
 

复制代码 代码如下:
<?php
//将数组输出到XML文件中
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$article_array = array(
"第一篇" => array(
"title"=>"PHP访问MySql数据库 初级篇",
"link"=>"http://blog.csdn.net/morewindows/article/details/7102362"
),
"第二篇" => array(
"title"=>"PHP访问MySql数据库 中级篇 Smarty技术",
"link"=>"http://blog.csdn.net/morewindows/article/details/7094642"
),
"第三篇" => array(
"title"=>"PHP访问MySql数据库 高级篇 AJAX技术",
"link"=>"http://blog.csdn.net/morewindows/article/details/7086524"
),
);
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
$rootelement = $dom->createElement("MoreWindows");
foreach ($article_array as $key=>$value)
{
$article = $dom->createElement("article", $key);
$title = $dom->createElement("title", $value['title']);
$link = $dom->createElement("link", $value['link']);
$article->appendChild($title);
$article->appendChild($link);
$rootelement->appendChild($article);
}
$dom->appendChild($rootelement);
$filename = "D:test.xml";
echo 'XML文件大小' . $dom->save($filename) . '字节';
?>

#-------------------
 

复制代码 代码如下:
<?php
//将数组输出到XML文件中
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$article_array = array(
"第一篇" => array(
"title"=>"PHP访问MySql数据库 初级篇",
"link"=>"http://blog.csdn.net/morewindows/article/details/7102362"
),
"第二篇" => array(
"title"=>"PHP访问MySql数据库 中级篇 Smarty技术",
"link"=>"http://blog.csdn.net/morewindows/article/details/7094642"
),
"第三篇" => array(
"title"=>"PHP访问MySql数据库 高级篇 AJAX技术",
"link"=>"http://blog.csdn.net/morewindows/article/details/7086524"
),
);
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;
$rootelement = $dom->createElement("MoreWindows");
foreach ($article_array as $key=>$value)
{
$article = $dom->createElement("article", $key);
$title = $dom->createElement("title", $value['title']);
$link = $dom->createElement("link", $value['link']);
$article->appendChild($title);
$article->appendChild($link);
$rootelement->appendChild($article);
}
$dom->appendChild($rootelement);
$filename = "D:test.xml";
echo 'XML文件大小' . $dom->save($filename) . '字节';
?>

运行该PHP会在D盘上生成test.xml文件(win7 + XAMPP + IE9.0测试通过)

二.读取XML文件
以读取前文中生成的D:test.xml为例:
 

复制代码 代码如下:

<?php
//读取XML文件
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$filename = "D:test.xml";
$article_array = array();

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->load($filename);

//得到<article>结点
$articles = $dom->getElementsByTagName("article");
echo '<article> 结点个数 ' . $articles->length;
foreach ($articles as $article)
{
$id = $article->getElementsByTagName("id")->item(0)->nodeValue;
$title = $article->getElementsByTagName("title")->item(0)->nodeValue;
$link = $article->getElementsByTagName("link")->item(0)->nodeValue;
$article_array[$id] = array('title'=>$title, 'link'=>$link);
}

//输出结果
echo "<pre>";
var_dump($article_array);
echo "</pre>";
?>

#-----------------
 

复制代码 代码如下:

<?php
//读取XML文件
// by MoreWindows( http://blog.csdn.net/MoreWindows )
$filename = "D:test.xml";
$article_array = array();

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->load($filename);

//得到<article>结点
$articles = $dom->getElementsByTagName("article");
echo '<article> 结点个数 ' . $articles->length;
foreach ($articles as $article)
{
$id = $article->getElementsByTagName("id")->item(0)->nodeValue;
$title = $article->getElementsByTagName("title")->item(0)->nodeValue;
$link = $article->getElementsByTagName("link")->item(0)->nodeValue;
$article_array[$id] = array('title'=>$title, 'link'=>$link);
}

//输出结果
echo "<pre>";
var_dump($article_array);
echo "</pre>";
?>