2024年6月13日发(作者:)
php解析xml文件
使用PHP解析XML文件
说明:实现PHP解析XML的方法有很多种,本文通过实现一个简单的接口功能讲解PHP
操作DOM解析XML的原理和操作方法,文中涉及的代码未做调优仅供参考。
功能简介:程序需要能自动按照相应的规则,生成xml文件下载地址,并且解析远程的
xml文件给视频挑选人员(在此简称为编辑,)提供可操作化web接口,编辑选择相应的视
频并且编辑好视频发布名和需要发布的栏目后,程序自动生成含待发布内容的html文件供
技术处理人员按照编译要求到远程服务器上下载视频。
处理流程示意图如下:
利用到主要技术有php通过dom解析xml文件、php文件操作、php表单传值、phpURL
传值、jquery日历插件使用、flowplayer播放器编译使用等,在此仅介绍以下四点。
1.
2.
3.
4.
dom解析xml文件
php文件操作
jquery日历插件使用
flowplayer播放器使用
一、php利用Dom解析xml文件
Php解析xml文件有多种方式,这里使用最容易上手的dom解析器。
1.1由于远端服务器生成xml文件命名规则为日期加时间方式如:
远端xml所在服务器ip地址(以下使用*.*.*.*表示)/表
第 1 页 共 10 页
php解析xml文件
示2011-2-21上午生成的xml文件
*.*.*.*/表示2011-2-21下午生成的xml文件
所以php必须获得准确时间,而php下的date()函数直接获取的时间会比当前时
间晚8个小时,通过时间戳格式化时间又相对比较麻烦,找了一个比较简便的方法,在
php文件头部加上这行代码定义时区为
中国然后就可以使用date()函数格式化时间输出和当前时间就吻合了,开始遍写
代码
1.2首先获得当前日期和时间判断当前时间是否小于15:00,生成远程xml的URL
地址然后交给dom去读取解析。
$nowhour=date("H"); //获取当前时间
$today=date("Ymd"); //格式化当前日期输出
if($nowhour<15)
$url="*.*.*.*/shipinbu/".$today.""; //如果当前时间小于
15:00
else $url=" *.*.*.*/shipinbu/".$today."";
xml文件格式如下图:
第 2 页 共 10 页
php解析xml文件
树顶端的xset节点有total_num和几个program子节点,每个program子节点下
又有title、subtitle、keyword、brief、source、notes、sampling、edituser、
publishdate、filepath、imagepath、filesize、filelength13个节点。
$doc = new DOMDocument(); //实例化dom
$doc->load($url); //加载xml文件
$xsets = $doc->getElementsByTagName("xset"); //获取顶级节点
foreach($xsets as $xset)
{
$total_nums = $xset -> getElementsByTagName("total_num");
$total_num = $total_nums -> item(0) -> nodeValue; // $total_num
内文本节点的值
echo “当前推送视频”. $total_num.”个”;
}
$programs = $xset -> getElementsByTagName("program");
foreach($programs as $program) //分别获取program节点内的文本节
点的值
{
$titles = $program -> getElementsByTagName("title");
$title = $titles -> item(0) -> nodeValue;
$sources = $program -> getElementsByTagName("source");
$source = $sources -> item(0) -> nodeValue;
$publishdates = $program -> getElementsByTagName("publishdate");
$publishdate = $publishdates -> item(0) -> nodeValue;
$filepaths = $program -> getElementsByTagName("filepath");
$filepath = $filepaths -> item(0) -> nodeValue;
$imagepaths = $program -> getElementsByTagName("imagepath");
$imagepath = $imagepaths -> item(0) -> nodeValue;
$filesizes = $program -> getElementsByTagName("filesize");
$filesize = $filesizes -> item(0) -> nodeValue;
第 3 页 共 10 页
php解析xml文件
}
$filelengths = $program -> getElementsByTagName("filelength");
$filelength = $filelengths -> item(0) -> nodeValue;
---------------------------数据显示----------------------------------
脚本执行后如下图所示:
编辑选择好相关视频预览后选择发布栏目填写发布标题,点击发布数据通过form
传值传给处理,全部挑选完后点击底部的“点击发布已经挑选好的视频”
通过url传值传给文件处理动作。
二、Php文件操作
2.1php写文件读写文件
$filename=$today.".html"; //定义文件名
if(!file_exists($filename)) //判断定义的文件不存在则$content赋值
含html头部信息
{
$content="Transitional//EN"
"/TR/xhtml1/DTD/">
第 5 页 共 10 页
php解析xml文件
xml文件来源 | 视频原标题 | 视频下载地址 | 视频发布标题 | 发布栏目 | 其他说明 |
xml链接 | ".$ytitle." | 视频下载 | " .$vtitle." | " .$lanmu." | ".$other." |
xml链接 | ".$ytitle." | 视频下载 | " .$vtitle." | " .$lanmu." | ".$other." |
html文件写操作。在根目录下会生成一个以当前日期命名的html文件,技术人员查看
可以查看该文件,按照该文件内容将需要发布的视频下载到本地后发布到cms相
应的栏目中,操作完成后该html文件被移动到/html目录中备份,完成当日的视频发布工作。
date_default_timezone_set('PRC');
$today=date("Ymd");
$filename=$today.".html";
if(!file_exists($filename))
{
echo "没有需要发布的视频,返回首页";
echo "";
}
Else //如果有html文件
{
if ($handle = opendir($dir))
第 7 页 共 10 页
{
function filedir($dir)
php解析xml文件
{
while (false !== ($file = readdir($handle))) {
if ($file != "." && $file != ".."&& $file != "js"&& $file != "vod" && $file !=
"html"&& $file != "vod") //屏蔽掉其他类文件
{
if (!ereg(".php", $file)) {
echo " " . $file .
" 发布完成移除该文件";
}
}
}
closedir($handle);
}
}
filedir(".");
}
php移动文件操作
$oldfile=$_GET["filename"]; //旧目录
$newFile='html/'.$oldfile; //新目录
copy($oldfile,$newFile); //拷贝到新目录
unlink($oldfile); //删除旧目录下的文件
echo "操作成功";
echo "";
三、Jquery日历插件使用
有时需要查询以前的推送列表,且下午15:00后也会查看当天上午推送视频列表,
所以添加了查询功能,为方便查询,在这里使用嵌套了Jquery的一款日历插件jQuery
Datepicker plugin。Datepicker官方支持多种语言包,含多种主题包,使用非常简单,
首先将、/、都
复制到/js目录下,复制到/images目录下。
在网站头部添加
第 8 页 共 10 页
php解析xml文件
/> //导入Datepicker样式表,这里使用datepick默认的样式。
//调用jquery
//调用Datepicker
//调用Datepicker中文包