当前位置:早雪网网络学院编程文档XML技术 → XSL语法介绍

XSL语法介绍

减小字体 增大字体 作者:未知  来源:从互联网收集并转载  发布时间:2005-2-10 21:48:03
作者:胡朝晖  
例子已经放在上面,下面我们可以来仔细的分析其中的语法结果和关键所在:

  首先注意到的是,XSL文件本身即是一份 XML文件,所以在XSL文件的开头,一样有和XML文件相同的声明。W3C这个XML的标准机构为XSL定义了很多标记(元素),XSL文件就是这些标记和HTML标记的组合。在XSL文件中,必须有如下一行的代码:

  <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">

  这里,xsl:stylesheet是XSL文件的根元素,在根元素中包含了所有的排版样式,样式表就是由这些排版样式组合成的;xmlns:xsl="http://www.w3.org/TR/WD-xsl"这一句主要用来说明该XSL样式表是使用W3C所制定的XSL,设定值就是XSL规范所在的URL地址。

  实际上,这里"http://www.w3.org/TR/WD-xsl"就是一个名字空间(namespace),我们在上面关于XML Schema语法介绍的时候已经进行过介绍。这是一个标准的名字空间。"stylesheet","template","for-each"等等关键字都是这个名字空间所定义的。

  当然在xsl:stylesheet还可以设定其他的属性,其他的属性有:

   1. default-space:决定是否保留XML文件中的空白,仅当值为"default"时保留。

   2. indent-result:决定是否保留XSL文件中的空白,值为"yes"时保留。

   3. language:设定在XSL文件中使用的脚本语言。

  然后,我们在上面的代码中看到有如下的代码:

  <xsl:template match="/">
    ………
  </xsl:template>

  这里实际上是表示了XSL解析器对XML文档的处理过程,它从根节点(由match="/"决定,这里"/"就表示根节点)开始,对XML文档进行遍历,并根据具体的代码从XML文档中取出相关的内容。这里关于属性match的取值是一个比较复杂的问题。它实际上表示的含义是从XML文档中取出一个特定的节点集合(XML文档可以被看成一个树的结构,这个在后面关于XML解析器分析中有详细的介绍)。这里,我们通过几个简单的例子来说明属性match的取值。

  比如下面一行代码:

  <xsl:template match="/">

  这行代码的意思是告诉XSL解析程序,当前需要处理的节点是根节点下的内容(用"/"来表示根节点),其实这里的match值内容的编写是要符合XPath的语意。关于XPath我们在后面的章节中会进行详细的介绍。

  再举一个例子:

  <xsl:template match="shoppingcart/item">

  这行代码要匹配的是shoppingcart元素下的item元素。而不管shoppingcart在XML文档结构树下的哪一个位置。比如XML文档的其中一段是这样的。

  <shoppingcart>
  <item>
  <itemNo>3333</itemNo>
  <itemName>屠龙刀</itemName>
  </item>
  <item>
  <itemNo>4444</itemNo>
  <itemName>离别钩</itemName>
  </item>
  </shoppingcart>

  那么它匹配的内容就是
   <item>
   <itemNo>3333</itemNo>
   <itemName>屠龙刀</itemName>
   </item>
   <item>
   <itemNo>4444</itemNo>
   <itemName>离别钩</itemName>
   </item>

  而下面这个例子:

  <xsl:template match="/shoppingcart/item">

表示只匹配XML文档根节点下的shoppingcart这个节点下的所有item元素。也就是说如果shoppingcart不是直接在根节点下的,它就不符合这个匹配条件。

  再看一个例子:

  <xsl:template match="price[@unit='USD']">

这个例子说明要匹配的是这样的节点:一个带unit属性的元素price,而且unit的值必须为"USD"。比如一段XML代码是这样的。

  <price>
   <unit>USD</unit>
   <amount>100</amount>
  </price>
  <price>
   <unit>RMB</unit>
   <amount>300</amount>
  </price>

  那么它匹配的内容就是:

  <price>
   <unit>USD</unit>
   <amount>100</amount>
  </price>

1 2 页
[数据载入中...] [返回上一页] [打 印]