当前位置: 首页 > 工具软件 > DocBook XSL > 使用案例 >

XSL学习笔记(一)

袁建木
2023-12-01

XSL学习笔记(一)

  有人说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:

<?xml version="1.0" encoding="ISO-8859-1"?>

  第二行XSL声明,下述声明方式是完全一致的:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:transform version="1.0"
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中所述。
  此元素可以完成简单的过滤,例如:

<xsl:for-each select="catalog/cd[artist='Bob Dylan']">
可用于寻找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语句。如例:

<xsl:choose>
   <xsl:when test="price &gt; 10">
      ... 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的引用。代码如下:

<script type="text/javascript">
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的转换。如下:
<%
set xml = Server.CreateObject("Microsoft.XMLDOM")
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

 类似资料: