用xsl显示xml (by quqi99)
作者:张华 发表于:2008-11-4 ( http://blog.csdn.net/quqi99 )
版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。
1,所用的XML文件是:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="display.xsl"?>
<article>
<url>http://ent.sina.com.cn/h/2008-06-17/01032062913.shtml</url>
<title>英国皇家芭蕾舞将在国家大剧院上演三台大戏</title>
<site>新浪</site>
<taskname>新浪大剧院</taskname>
<bodyText>两位主演利安娜?本杰明(女)、约翰?科博格均 信报讯(记者张学军) 从6月18日到26日,世界著名的英国皇家芭蕾舞团将在国家大剧院上演《曼侬》《睡美人》和《经典节目荟萃》三台大戏共9场演出。昨天,英皇的相关负责人和两位主要演员在大剧院举行了记者见面会。 据透露,英皇还将同国家大剧院、英国大使馆文化教育处联合举办一系列题为“舞动创意工作坊”的艺术教育普及活动。信报记者 苏冠名/摄</bodyText>
<body><![CDATA[<DIV class="artibody" id="artibody"> <CENTER> <IMG alt="英国皇家芭蕾舞将在国家大剧院上演三台大戏" border="1" src="http://i1.sinaimg.cn/ent/h/2008-06-17/01e59819ced94d5ad3f009006c856981.jpg"></CENTER > <CENTER>两位主演利安娜?本杰明(女)、约翰?科博格均</CENTER> <BR> <P> 信报讯(记者张学军) 从6月18日到26日,世界著名的英国皇家芭蕾舞团将在国家大剧院上演《曼侬》《睡美人》和《经典节目荟萃》三台大戏共9场演出。昨天,英皇的相关负责人和两位主要演员在大剧院举行了记者见面会。</P> <P> 据透露,英皇还将同国家大剧院、英国大使馆文化教育处联合举办一系列题为“舞动创意工作坊”的艺术教育普及活动。信报记者 苏冠名/摄</P> <CENTER></CENTER> </DIV>]]></body>
<src>北京娱乐信报</src>
<subject />
<date>20080616</date>
<picurls>
<picurl anchor="">http://i1.sinaimg.cn/ent/h/2008-06-17/01e59819ced94d5ad3f009006c856981.jpg</picurl>
</picurls>
</article>
2,所用的XSL文件是:
<?xml version="1.0" encoding="utf-8"?><!-- DWXMLSource="test16232003640.shtml" --><!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp " ">
<!ENTITY copy "©">
<!ENTITY reg "®">
<!ENTITY trade "™">
<!ENTITY mdash "—">
<!ENTITY ldquo "“">
<!ENTITY rdquo "”">
<!ENTITY pound "£">
<!ENTITY yen "¥">
<!ENTITY euro "€">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform ">
<xsl:output method="html" encoding="utf-8" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/ >
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>Untitled Document</title>
</head>
<body>
<p> </p>
<!-- 条件判断,为了修正‘XML 文档必须有一个顶层元素。处理资源’错误,与work.jsp配合使用 -->
<xsl:if test="article/url='404'">
<p align="center"> <img src="http://i2.sinaimg.cn/dy/pc/2007-05-29/27/U48P1T27D2815F1264DT20070529161951.gif " align="center" border="0" /> </p>
</xsl:if>
<xsl:if test="article/url!='404'">
<p>URL: <xsl:value-of select="article/url"/>
<a href="{article/url}">查看原文</a>
</p>
<p><strong>标题: </strong> <xsl:value-of select="article/title"/></p>
<p><strong>任务: </strong> <xsl:value-of select="article/taskname"/></p>
<p><strong>站点: </strong> <xsl:value-of select="article/site"/></p>
<p><strong>来源: </strong> <xsl:value-of select="article/src"/></p>
<p><strong>栏目: </strong> <xsl:value-of select="article/subject"/></p>
<p><strong>日期: </strong> <xsl:value-of select="article/date"/></p>
<p><strong>附件: </strong> </p>
<xsl:for-each select="//picurl">
<xsl:value-of select="."/> <br/>
</xsl:for-each>
<p> </p>
<p></p>
<p align="center"><strong> <a href="{article/url}"><xsl:value-of select="article/title"/></a></strong></p>
<p align="center">
<!-- 循环显示链接 -->
<xsl:for-each select="//picurl">
<!-- 显示图片链接,与下面的 <img src="{.}" align="center" border="0"/> 等价
<xsl:element name="img">
<xsl:attribute name="src"> <xsl:value-of select="."/> </xsl:attribute>
<xsl:attribute name="align">middle</xsl:attribute>
<xsl:attribute name="border">0</xsl:attribute>
</xsl:element>
<br/>
-->
<p align="center">
<!-- 如果内容中已经有图片链接是以http开头的,它自己会显示就不需要处理了 -->
<xsl:variable name="imgurl"><xsl:value-of select="."/></xsl:variable>
<xsl:if test="not(contains($imgurl,'http://'))">
<img src="{.}" alt="{.}" align="center" border="0"/>
<br/>
</xsl:if>
</p>
</xsl:for-each>
</p>
<p>
<!-- 要正常显示HTML代码,需加disable-output-escaping属性 -->
<xsl:value-of select="article/body" disable-output-escaping="yes"/></p>
<p> </p>
<p align="center"> </p>
<p> </p>
<p> </p>
<p> </p>
</xsl:if>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
3,用于显示的JSP(work.jsp)文件是:
<%@ page contentType="text/xml;charset=utf-8"%>
<%@ page import="java.io.*"%>
<%
String file = request.getParameter("file");
if(file==null || "".equals(file)){
//XML 文档必须有一个顶层元素。处理资源
out.println("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
out.println("<?xml-stylesheet type=/"text/xsl/" href=/"display.xsl/"?>");
out.println("<article>");
out.println("<url>404</url>");
out.println("</article>");
//out.println("aaaa");
// response.sendRedirect("pic.jsp");
// request.getRequestDispatcher("pic.jsp").forward(request, response);
}else{
File f = new File(file);
if(!f.exists()){
out.println("<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
out.println("<?xml-stylesheet type=/"text/xsl/" href=/"display.xsl/"?>");
out.println("<article>");
out.println("<url>404</url>");
out.println("</article>");
// out.println("bbb");
// response.sendRedirect("pic.jsp");
// RequestDispatcher rd = request.getRequestDispatcher("pic.jsp");
// rd.forward(request,response);
}else{
FileInputStream fis = new FileInputStream(f);
InputStreamReader reader = new InputStreamReader(fis,"utf-8");
BufferedReader br=new BufferedReader(reader);
String line=br.readLine();
StringBuffer sb = new StringBuffer();
while(line!=null && !"".equals(line)){
sb.append(line + "/n");
line=br.readLine();
}
br.close();
reader.close();
fis.close();
// System.out.println(sb.toString());
out.print(sb.toString());
}
}
%>
4, 调用方法:直接访问: work.jsp?file=" + file 即可。