ASP.NET 也可以做得很好 1.XSLT初识 一个HELLO例子
1. XSLT初识 一个HELLO例子
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中去,也将大大方便将来对网站的维护。