绿豆.Net

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

有人说XSL是CSS的替换者,真的吗?

  1、简介
  XSL是一种描述样式单的语言,包括XSLT、XPath和XML格式对象三部分。
  与HTML不同,XML没有预定义的标签,所以浏览器不知道如何显示XML文档,而XSL就是XML之外用以说明如何显示的。

  2、XSLT
  XSLT是一种将XML文档转换为另一种格式XML文档的语言。XML利用XSLT将源XML树转换为结果XML树。

  3、浏览器差异
  与IE6一起MSXML解析器完全支持XSLT1.0和XPath1.0,NetScape6不完全支持XSL(NS7呢?)

  4、XSL样式单
  一个XSL文件也是XML文件,所以第一行也要声明XML:

 

  第二行XSL声明,下述声明方式是完全一致的:


xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  当用上述命名空间时,必须有version="1.0"的说明。
  看列例子:XML文件,XSL文件,XML+XSL.
 

  5、<xsl:template>元素
  XSL样式单是由模板组成,每个模板就是一组规则。
  模板的match属性,用以将模板和XML中的元素关联起来。如match="/"则将此模板与XML的根关联起来了。
  
  6、<xsl:value-of>元素
  该元素用于取得选定XML节点的值。
  对节点的选取,由其select属性完成,select的值是一个XPath表达式。XPath表达式非常象*nix系统的多级目录的写法。如例中的“breakfast_menu/food”等。

  7、<xsl:for-each>元素
  完成在XSL中的循环动作。其属性select同6中所述。
  此元素可以完成简单的过滤,例如:

可用于寻找Bob Dylan的CD作品。XSL定义了四种比较运算符:=、!=、&lt、&gt,两个比较之间可以用and 或or 连接。
 

  8、<xsl:sort>元素
  用于对输出进行排序,只需要将其放入<xsl:for-each>以内,并用select指明比较的元素即可。

  9、<xsl:if>元素
  当指定条件满足时,<xsl:if>包含的模板将派上用场。条件的定义,由其test属性指明,其操作符同7。
  一般说来,<xsl:if>常出现在<xsl:for-each>内部。

  10、<xsl:choose>、<xsl:when>、<xsl:otherwise>元素
  三者联合,实现多条件选择,类似C语言里的case语句。如例:

 

      ... some code ...
   </xsl:when>
   <xsl:otherwise>
      ... some code ....
   </xsl:otherwise>
</xsl:choose>

 

  10、<xsl:apply-templates>元素
  对当前元素和其子元素使用某一模板规则,象C里的递规函数,暗含着循环的功能。其用select属性指明元素。相对应的模板,则需要用match来判断传来的是什么元素,从这一点看模板象是C++里的重载函数。

  11、XSL在客户端
  当我们用浏览器打开一个引用XSL的XML文件时,浏览器在显示前做了一个将XML转换为XHTML的隐蔽动作。
  这个动作可以用Javascript在IE上显式的完成,前提是XML中不要含有对XSL的引用。代码如下:

 

var xml = new ActiveXObject("Microsoft.XMLDOM")
xml.async = false
xml.load("cdcatalog.xml")
var xsl = new ActiveXObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load("cdcatalog.xsl")
document.write(xml.transformNode(xsl))
</script>

  12、XSL在服务器端
  对于IIS而言,可以很方便地在服务器端实现XML的转换。如下:

xml.async = false
xml.load(Server.MapPath("cdcatalog.xml"))
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("cdcatalog.xsl"))
Response.Write(xml.transformNode(xsl))
%>

  对于其它类型的服务器呢?
 

  以上只是基本内容,高级学习在后面呢。:)
  主要是元素没讲全,还XSL函数没讲。
http://www.w3schools.com/xsl/xsl_w3celementref.asp
http://www.w3schools.com/xsl/xsl_functions.asp
第一部分学了7个元素,还有24个,一个一个学吧。
  1、<xsl:import>、<xsl:include>、<xsl:apply-imports>元素
  <xsl:import>与<xsl:include>相比,两者都须是<xsl:stylesheet>的子结点,但前者定义的模板规则优先级比较低,且必须为第一个子结点。两者的功能是相同的,都是将另一个定义好的XSL文件装入到当前XSL文件中来。
  装来的模板规则,由<xsl:apply-imports>指定何时何地使用。
  它们的语法分别是:


<xsl:apply-templates />
 

  2、<xsl:attribute>、<xsl:attribute-set>元素
  前者用以给元素增加属性,已有同名属性则被它替换。后者是<xsl:stylesheet>的子结点,用来定义一组属性,将其用于整个文档。语法如下:


<xsl:attribute-set use-attribute-sets="name-list"><!-- Content:xsl:attribute* --></xsl:attribute-set>

  namespace可选,use-attribute-sets可选,用以使用其它预定义的attribute-set.
 

  3、<xsl:param>、<xsl:call-template>、<xsl:with-param>元素
  <xsl:param>用来定义全局参数(是<xsl:styelsheet>的子点时)或局域参数(在一个模板内时),<xsl:call-template>用来调用指定的模板,<xsl:with-param>则用来调用模板或使用模板时传递参数。需要说明的是,with-param的name属性的值必须与预定义的值一致。语法如下:


<xsl:call-template ><!-- Content:xsl:with-param* --></xsl:call-template>
<xsl:with-param select="expression"><!-- Content:template --></xsl:with-param>

  其中的select都是可选的,前者的select用来指定默认值,后者可以来传值(也可用标签的内容传值)。
 

  4、<xsl:variable>元素
  定义全局或局部变量,其一旦赋值,不能改动。语法:

 

  5、<xsl:copy>、<xsl:copy-of>元素
  两者都复制当前节点及其命名空间,但后者还复制子结点和当前结点属性。语法如下:


<xsl:copy use-attribute-sets="name-list"><!-- Content:template --></xsl:copy>
其中use-attribute-sets可选。
 

  6、<xsl:comment>元素
  在结果树中生成一个注释结点。语法如下:

 

  7、<xsl:decimal-format>元素
  定义那些在调用函数format-number()进行由数字向字符器转换的过程中用到的一些特殊字符或符号。语法如下:


minus-sign="char" NaN="string" percent="char" per-mille="char" zero-digit="char" digit="char" pattern-separator="char"/>
所有项是可选的。
 

  8、<xsl:element>元素
  在结果树上生成一个元素,语法如下:

其中后两个属性是可选的,前俩者的值可在实时运行时算出。
 

  9、<xsl:fallback>元素
  当xsl的元素不能被处理器识别时,调用fallback提供的备用程序。

 

  10、<xsl:key>元素
  这是一个顶层元素,定义一个KEY供Key函数使用。

 

  11、<xsl:message>元素
  用来输出信息,如错误信息。所有的其它元素都可出现在其内容中。

 

  12、<xsl:namespace-alias>元素
  用来在输出时将某命名空间替换为另一个。

 

  13、<xsl:number>元素
  用以标明当前结点在源树中的顺序,也可以用格式化一个数。


lang="languagecode" letter-value="alphabetic|traditional" grouping-separator="character" grouping-size="number"/>
 

  14、<xsl:output>元素
  用以定义output的格式,


standalone="yes|no" doctype-public="string" doctype-system="string" cdata-section-elements="namelist"
indent="yes|no" media-type="string"/>
 

  15、<xsl:preserve-space>、<xsl:strip-space>元素
  两者用来指明元素内容的空格保留还去掉。由于默认是保留的,所以只有在用了去掉时才需指明保留者。


<xsl:strip-space elements="list-of-element-names"/>

  list-of-element-names的值中可用*通配符。
 

  16、<xsl:processing-instruction>元素
  用来向输出写处理指令,如指定css文件等。

 

  17、<xsl:text>元素
  用来输出字串常量。

posted on 2007-05-15 10:10  杜军  阅读(410)  评论(0编辑  收藏  举报