XSL的初步应用实例
来源:http://www.7dit.com 作者:7dit 发布日期:2008-10-01 05:25:12 点击量:427
XSL是针对XML进行界面优化的一种文档解释语言,本站通过RSS文章频道聚合功能,使用XSL对XML进行界面优化。其中RSS是通过RSS2Writer类实现新动态生成XML页面。
修改过的RSS2Writer类可以在本站下载频道获得,修改过的类可以直接输出CDATA类型的节点数据
php代码块如下:
<?php
include("include/rss/rss2writer.php"); //引入Rss类
/*
* ......中间省略对数据库的操作,获取文章集合,$articlelist
* 文章对象有相关属性也省略,这个看具体的实体类的设计
*/
include("include/rss/rss2writer.php"); //引入Rss类
/*
* ......中间省略对数据库的操作,获取文章集合,$articlelist
* 文章对象有相关属性也省略,这个看具体的实体类的设计
*/
$meta=array(); //每个RSS文章节点的meta部分,该RSS类声明该meta为一个集合,此处为空,可以以键=>值的方式存放所需要的meta说明
$rss = new RSS2Writer("http://www.7dit.com","7dit","7dit",$meta);//建立父节点的相关信息
foreach ($articlelist as $art) //开始遍历文章集合
{
$previewContent=strip_tags(stripslashes(nl2br($art->acontent))); //去除所有的HTML标记
$preImg = substr($art->appre,-3)=="gif"||substr($art->appre,-3)=="jpg"?$art->appre:"noimg"; //预览图
$preContent = strlen($previewContent)>240?utf_substr($previewContent,360)."…………":$previewContent; //截取360长度的UTF中文预览,其中utf_substr方法是自定义的截取utf编码的方法,本站也有该代码
$itemMeta["pubDate"]=$art->adate; //开始为每个文章建立meta集合
$itemMeta["preImg"]=$preImg;
$rss->addItem("aid,"$art->atitle","http://www.7dit.com/showarticle.php?aid=".$art->aid,"$art->atitle","<![CDATA[".$preContent."]]> ",$itemMeta); //调用addItem方法,添加子节点
}
$rss->output("utf-8");//输出
header("content-type:text/xml");//设置文档类型
?>
$rss = new RSS2Writer("http://www.7dit.com","7dit","7dit",$meta);//建立父节点的相关信息
foreach ($articlelist as $art) //开始遍历文章集合
{
$previewContent=strip_tags(stripslashes(nl2br($art->acontent))); //去除所有的HTML标记
$preImg = substr($art->appre,-3)=="gif"||substr($art->appre,-3)=="jpg"?$art->appre:"noimg"; //预览图
$preContent = strlen($previewContent)>240?utf_substr($previewContent,360)."…………":$previewContent; //截取360长度的UTF中文预览,其中utf_substr方法是自定义的截取utf编码的方法,本站也有该代码
$itemMeta["pubDate"]=$art->adate; //开始为每个文章建立meta集合
$itemMeta["preImg"]=$preImg;
$rss->addItem("aid,"$art->atitle","http://www.7dit.com/showarticle.php?aid=".$art->aid,"$art->atitle","<![CDATA[".$preContent."]]> ",$itemMeta); //调用addItem方法,添加子节点
}
$rss->output("utf-8");//输出
header("content-type:text/xml");//设置文档类型
?>
此时输出的仅为最原始的XML代码,现在通过XSL对浏览器显示XML进行界面优化,建立一个rss.xsl文件
<?xml version="1.0" encoding="GB2312"?>
<HTML xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<HEAD>
<TITLE>奇点中文网 - 文章聚合</TITLE>
<link href="xsl.css" rel="stylesheet" type="text/css" /><!--为XSL的HTML页引入样式表-->
</HEAD>
<BODY>
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr><td align="center">
<span style="font-size:20px;font-weight: bold;color: #FFFFFF;">
注:本页为XSL优化过的文章RSS,可以使用任何RSS阅读工具进行浏览
</span>
</td></tr>
</table>
<xsl:for-each select="rss/channel/item"><!--遍历指定节点下的子节点,select设置当前的父节点路径-->
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" id="citem">
<tr><td>
<div id="ctitle">文章标题:
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
<xsl:attribute name="target"> _blank</xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
</div>
<div id="cdate">发表时间:<xsl:value-of select="pubDate"/></div>
<xsl:if test="preImg[value() $ine$ 'noimg']"><!--判断preImg节点的值是否为noimg,不是则执行下面代码-->
<div>图片预览:</div>
<div id="cimg">
<xsl:element name="img">
<xsl:attribute name="src"><xsl:value-of select="preImg"/></xsl:attribute>
</xsl:element>
</div> </xsl:if>
<div>内容预览:</div>
<div id="cdesc"><xsl:value-of select="description"/></div>
<div id="cmore">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
<xsl:attribute name="target"> _blank</xsl:attribute>
[全文阅读]
</xsl:element>
</div>
</td></tr>
</table>
</xsl:for-each>
</BODY>
</HTML>
<HTML xmlns:xsl="http://www.w3.org/TR/WD-xsl" xmlns:xdt="http://www.w3.org/2005/xpath-datatypes">
<HEAD>
<TITLE>奇点中文网 - 文章聚合</TITLE>
<link href="xsl.css" rel="stylesheet" type="text/css" /><!--为XSL的HTML页引入样式表-->
</HEAD>
<BODY>
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr><td align="center">
<span style="font-size:20px;font-weight: bold;color: #FFFFFF;">
注:本页为XSL优化过的文章RSS,可以使用任何RSS阅读工具进行浏览
</span>
</td></tr>
</table>
<xsl:for-each select="rss/channel/item"><!--遍历指定节点下的子节点,select设置当前的父节点路径-->
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0" id="citem">
<tr><td>
<div id="ctitle">文章标题:
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
<xsl:attribute name="target"> _blank</xsl:attribute>
<xsl:value-of select="title"/>
</xsl:element>
</div>
<div id="cdate">发表时间:<xsl:value-of select="pubDate"/></div>
<xsl:if test="preImg[value() $ine$ 'noimg']"><!--判断preImg节点的值是否为noimg,不是则执行下面代码-->
<div>图片预览:</div>
<div id="cimg">
<xsl:element name="img">
<xsl:attribute name="src"><xsl:value-of select="preImg"/></xsl:attribute>
</xsl:element>
</div> </xsl:if>
<div>内容预览:</div>
<div id="cdesc"><xsl:value-of select="description"/></div>
<div id="cmore">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="link"/></xsl:attribute>
<xsl:attribute name="target"> _blank</xsl:attribute>
[全文阅读]
</xsl:element>
</div>
</td></tr>
</table>
</xsl:for-each>
</BODY>
</HTML>
在原RSS类中的xml.php中,我已经通过<?xml:stylesheet type="text/xsl" href="rss.xsl"?>指定该XML的xsl文件,因此,XML将按XSL所定义的HTML格式输出XML数据。效果可以看本站的rss.php页
Copyright © 2005 奇点中文网--7dit.com
闽ICP备05001292号
闽ICP备05001292号
