如果版主觉得这篇文章可以,请帮我置顶,在此感谢了![/COLOR]
<?php
/*
程序运行环境:IIS5.0+PHP5.0.0(PHP低于这个版本将无法运行)
程序文件名随便命名,XML文件由程序第一次运行时自动生成
在免费使用本程序时,请勿必保留以下版权信息,绝不会因此而影响程序运行速度
程序编写:2004年9月19日18时于湖南科技大学学工处
作 者:孤芳翔鹰(蒋赞)
联系OICQ:9970143
个人站点:http://www.21xml.com [世纪XML网](因时间与学习原因,目前无法内容空缺)
http://www.6428.com [商务网站]
电子邮箱:webmaster@6428.com
初成立的雄鹰国际工作室 立誓争创国际一流工作室
相关说明:
本人对PHP语言并不能算精通,只能说是掌握了这门语言,由于我自己对XML有非常大的
爱好,同时完全掌握了ASP/JS/VBS对XML的操作,所以在一年之前我就曾经试图采用PHP与Perl来操作XML
但是最终花费了大量时间到头来编出来的程序都是一些简单的解析XML功能,对XML操作完全处于文本操作层次
由于PHP5.0的发布,终于使得PHP能够对XML脱离文本进行操作了,花费了我三天的时间到处找PHP操作XML的相关
文章,而收获甚少。在基本处于对PHP与XML操作功能掌握不甚深的时候,奉上我给大家一份小礼物(PHP+XML留言簿)吧。
附加说明:
1、这个PHP+XML留言簿基本实现了留言簿的所有功能;
2、无分页功能,分页功能很简单,大家自己可以增加相关代码;也可以利用JS来显示所以留言并对留言进行分页;
JS调用XML及分页功能,可以参考如下网页:http://www.21xml.com/technology/item.htm?ID=10
3、由于PHP对XML的子节点值获取并不尽人意(可能本人知识浅薄,没有学到其知识)
所以在获取子节点值的时候,我使用了foreach语句,foreach并不能完全让人接纳;
4、同时在对子节点进行编辑的时候,无法精确定位,所以我也只好采用foreach与数组定位;
(这样的做法我也是迫不得以的,只因目前参考资料太少了,只能等些日子,或许我还会有新的发现哦)
5、由于本人经常编写ASP的习惯,程序风格完全基于VBS模式,不足之处望大家指教;
顺便说一声,如果大家有Perl操作XML与C操作XML相关资料不防给我寄发一份,在此谢谢大家了!
XML正在关注 未来在我们手中 (Focusing.......)
最后再说一句:我在2003年6月份发布了雄鹰国际ASP+XML留言簿,发布之后立及有人改了版权,冒充是自己编写的
希望大家尊重一下别人的劳动成果,我们学生编写一个好的程序不容易,宣传自己的网站更不容易。
改进程序无所谓,但是完全将版权给改了,那就不能让俺高兴哦!^_^^_^
如果大家还有什么不懂的地方,可以加我的QQ(9970143),或者访问一个未完成的世纪XML网 http://www.21xml.com
*/
?>
雄鹰国际PHP+XML留言簿(学习版)
雄鹰国际PHP+XML留言簿(学习版) |
| 〖发表留言〗〖显示留言〗 |
<?php
class StudyXML extends DOMDocument
{
private $Root;
public function __construct()
{
parent:: __construct();
if (!file_exists("message.xml"))
{
$xmlstr = "<?xml version='1.0' encoding='GB2312'?><www.21xml.com>";
$this->loadXML($xmlstr);
$this->save("message.xml");
}
else
$this->load("message.xml");
}
public function Append($Subject,$Content)
{
$Root = $this->documentElement;
$AutoID =date("Ynjhis");
$NAutoID = $this->createElement("autoid");
$text = $this->createTextNode(iconv("GB2312","UTF-8",$AutoID));
$NAutoID->appendChild($text);
$NSubject = $this->createElement("subject");
$text = $this->createTextNode(iconv("GB2312","UTF-8",$Subject));
$NSubject->appendChild($text);
$NContent = $this->createElement("content");
$text = $this->createTextNode(iconv("GB2312","UTF-8",$Content));
$NContent->appendChild($text);
$Rs = $this->createElement("rs");
$Rs->appendChild($NAutoID);
$Rs->appendChild($NSubject);
$Rs->appendChild($NContent);
$Root->appendChild($Rs);
$this->save("message.xml");
echo "<script>alert('添加成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
}
public function Delete($AutoID)
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs= $xpath->query("//rs[autoid=$AutoID]");
$Root->removeChild($Rs->item(0));
$this->save("message.xml");
echo "<script>alert('删除成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
}
public function ListMsg()
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs = $this->getElementsByTagName("rs");
$Rs_Length =$Rs->length;
for($i=0;$i<$Rs->length;$i++)
{
/*
获取各字段值
下面的foreach语句使用得不尽人意,但是没有办法,PHP的XML操作技术文章目前很少,我凭借自己对ASP操作XML文件的掌握程度
花了上10个小时才弄成为foreach实现字段提取功能,期待以后我的新发现了,哈哈
提醒大家,其实XML文件的显示都可以直接使用JS或VBS的,只是在此为了大家学习,才使用PHP来直接显示XML文件的内容
*/
$K=0;
foreach ($Rs->item($i)->childNodes as $articles)
{
$Field[$K]=iconv("UTF-8","GB2312",$articles->textContent);
$K++;
}
print "";
print "留言标题:$Field[1] 留言内容: $Field[2]\n";
print " |
";
}
}
public function Modify($AutoID)
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs = $xpath->query("//rs[autoid=$AutoID]");
$K=0;
foreach ($Rs->item(0)->childNodes as $articles)
{
$Field[$K]=iconv("UTF-8","GB2312",$articles->textContent);
$K++;
}
print "";
}
public function SaveEdit($AutoID,$Subject,$Content)
{
$Root = $this->documentElement;
$xpath = new DOMXPath($this);
$Rs = $xpath->query("//rs[autoid=$AutoID]");
$Replace[0]=$AutoID;
$Replace[1]=$Subject;
$Replace[2]=$Content;
$K=0;
foreach ($Rs->item(0)->childNodes as $articles)
{
//$Field[$K]=iconv("UTF-8","GB2312",$articles->textContent);
$newText = $this->createTextNode(iconv("GB2312","UTF-8",$Replace[$K]));
$articles->replaceChild($newText,$articles->lastChild);
$K++;
}
echo "<script>alert('修改成功');location.href='".$_SERVER['PHP_SELF']."'</script>";
$this->save("message.xml");
}
public function PostMsg()
{
print "";
}
}
$HawkXML = new StudyXML;
switch($Action)
{
case "":
case "ListMsg":
$HawkXML->ListMsg();
break;
case "PostMsg":
$HawkXML->PostMsg();
break;
case "Append":
$HawkXML->Append($_POST['Subject'],$_POST['Content']);
break;
case "Delete":
$HawkXML->Delete($AutoID);
break;
case "Modify":
$HawkXML->Modify($AutoID);
break;
case "SaveEdit":
$HawkXML->SaveEdit($AutoID,$_POST['Subject'],$_POST['Content']);
break;
}
?>