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;

---------------------------数据显示----------------------------------

" alt="Image" title="

$title; ?>" width="160" height="120" />

$title; ?>

$filepath; ?>&title=" target="_blank">预览视频

//通过url传值将视频地址提交给播放器

//格式化文

件大小

//格式化

时长

发布视频至

发布标题更改为:

maxlength="50" onclick="='';" />

/>

第 4 页 共 10 页

php解析xml文件

脚本执行后如下图所示:

编辑选择好相关视频预览后选择发布栏目填写发布标题,点击发布数据通过form

传值传给处理,全部挑选完后点击底部的“点击发布已经挑选好的视频”

通过url传值传给文件处理动作。

二、Php文件操作

2.1php写文件读写文件

$filename=$today.".html"; //定义文件名

if(!file_exists($filename)) //判断定义的文件不存在则$content赋值

含html头部信息

{

$content="

Transitional//EN"

"/TR/xhtml1/DTD/">

第 5 页 共 10 页

php解析xml文件

今日待发布视频列表

";

}else{ //文件已存在则说明是发布的第二个视频$content仅含table中行信息即可

$content="

第 6 页 共 10 页

php解析xml文件

";

}

$handle= fopen ($filename,"a"); //以可读写方式打开定义的文件

if (!is_writable ($filename)){

die ("文件:".$filename."不可写,请检查其属性后重试!");

}

if (!fwrite ($handle,$content)){ //将$content内容写入文件

die ("生成文件".$filename."失败!");

}

fclose ($handle); //关闭指针

当编辑点击“点击发布已经挑选好的视频”后,$content="

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中文包

<?php echo $title; ?>

href=""

style="display:block;width:520px;height:330px"

id="player">

value="关闭窗口">

修改后另存为,/vod/解析通过url传值过来的视频地址交给

flowplayer播放器播放。当然flowplayer还有其他更复杂的功能和相应的插件支持,

可以参考官方网站说明。

第 10 页 共 10 页