流量统计:
Rixu Blog (日需博客)
日需博客,每日必需来踩踩哦..
posts - 108,comments - 54,trackbacks - 0

XSL 指扩展样式表语言(EXtensible Stylesheet Language)

万维网联盟开始发展 XSL 的起因是由于对基于 XML 的样式表语言的需求。

XSLT 指 XSL 转换。XSLT 将 XML 文档转换为其他文档,比如 XHTML

概念不多讲,这里附上W3C的网址 ,希望您一定要去看看!

老规矩,先写出个能运行的程序再说。

既然XSLT是将XML文档转换为其它文档,那么我们就先建立一个XML文档吧。(名为:HelloHtml.xml)

<?xml version="1.0" encoding="utf-8" ?>
<root>
<greeting>Hello Angel</greeting>
</root>

同样,还要再建立一个xslt文件,这里把它们放到同一个目录下。(名为:HelloHtml.xslt)

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl
="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="root">
<h1><xsl:value-of select="greeting"/></h1>
</xsl:template>
</xsl:stylesheet>

想来xml文件应该不用讲解了,那就看看xslt文件吧:

首先,它也是一个xml文档,stylesheet节点标记了此xsl样式文件的版本,xmlns(xml命名空间)等信息。output标记中method声明以什么形式转换文档,当然,它不仅仅能做html转换,也可以做其它诸如xml,text,pdf等转换。 ident声明了是否要对输出文档作缩进。

template标记声明这是一个转换模板,match标记声明了它将对哪个节点下的元素进行匹配。

value-of标记是个取值指令,它将会把xml文档中元素名为select中指定的元素的值取出来作为转换后的数据。

由此分析,经转换后输出的html内容应该是:

<h1>Hello Angel</h1>

由于xslt为WEB标准,并且被大多数主流浏览器所支持,所以仅仅需要将xml文件与xslt文件都发送到客户端,浏览器就会自动将其转换为XHTML文档。

接下来就是要给xml档引入xslt样式表了,这样xslt才能对xml文档进行转换,在xml文件的版本声明后加上这样一句:

<?xml-stylesheet type="text/xsl" href="/HelloHtml.xslt"?>

此时再浏览xml文件,就会看到浏览器不是仅仅显示一个XML的文档树了(有些浏览器显示纯xml文档是纯文本格式的),而应该是一个又大又粗的一号标题文本:



但它并不是一个标准的XHTML文档,因为转换后生成的内容仅仅是如下的:

<h1>Hello Angel</h1>

而一个标准的xhtml文档至少应该是下面:(当然,这里是xhtml1.1版本的,DOCTYPE可能会有所不同)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<h1>Hello Angel</h1>
</body>
</html>

如何才能输出这样一个文档呢?当然,看了上面的例子后,你一定能把除了DOCTYPE之外的其它元素都完整地输出,但关键就是要输出DOCTYPE,因为如果一个html/xhtml文档如果没有一个正确的doctype,将可能会触发浏览器的怪异模式,这将有可能造成浏览器对内容的显示非常混乱,当然,即使是小小的差异,只要是不可预料的也确实是件令人头痛的事情!

其实output指令还有两个属性,一个是doctype-public,一个是doctype-system。正好对应html/xhtml DOCTYPE中的PUBLIC和后面的SYSTEM声明。

那么我们只用这样写,便可以输出符合标准的html/xhtml文档了:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl
="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes" doctype-public="-//W3C//DTD XHTML 1.1//EN"
doctype-system
="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"/>
<xsl:template match="root">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Index</title>
</head>
<body>
<h1>
<xsl:value-of select="greeting"/>
</h1>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

看似一切都搞定了,也没有多少东西,但事实上并不是这样的。因为可能我们想要把产品列表放到一个文档中,评论信息又放入一个文档中,然后还要把它们合并成为一个文档。大多数情况下我们是没有一个现成的xml文档的。那些东西也是要动态生成的。我们还可能需要复杂的选择运算等等。。。

还有就是,本来网站上使用了点ajax对SEO就有点不太友好了,再加入xml/xslt这东东,网站的SEO怎么顾全呢?

下接着会看看多文档合并的问题,接着是解决SEO问题。。。总之,会把如何使用xslt制作符合标准的网站告诉您。而且还要提前告诉您下,虽然接下来要在服务器端使用xslt,但我们已经可以摆脱WebForm的page以提升性能,再加上所有跟数据、样式、HTML相关的内容都是纯文本的,并没有丝毫编译到DLL中去,也将大大方便将来对网站的维护。


Logo
作者:Gezidan
出处:http://www.rixu.net    
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文转载自 http://www.cnblogs.com/javennie/archive/2011/09/27/xsltgreeting.html
posted on 2011-09-28 10:24 日需博客 阅读(230) 评论(0)  编辑 收藏 引用 所属分类: C#技术文章转载

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理