让xsl在FF下能够正常显示<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict">


xsl格式后,用下面解决页面title在FF下被打印出来。

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="eng">


xsl输入W3C文件头<xsl:output method="html" encoding="gb2312" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"

doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>


让xsl显示HTML

   disable-output-escaping="yes"

   如: <xsl:value-of select="Root" disable-output-escaping="yes"/>



判断是否为空值  用normalize-space


判断节点是否存在  <xsl:if test="not(节点)">


在xsl中title属性如何实现换行?  用:&#13;&#10;


xsl取xml中的序列号  类似于db的自动编号 position()


XSL运算符:  除         155 div 100

  求余        155 mod 100

  求和        sum()         <xsl:value-of select="sum(//price)"/>

  统计        count()        <xsl:value-of select="count(PERSON[name=tom])"/>

  字符函数

   ....长度      string-length(str) 

   ....查找      substring

   ....查找      substring-after


  转换为数值     number()        <xsl:value-of select="number(book/price)"/> 如果非数值,返回空。


XSL使用自定义函数

声明:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml1/strict" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:Missde="MissdeVBS" xmlns:MissdeJS="MissdeJS">


函数:<msxsl:script language="VBScript" implements-prefix="Missde">

<![CDATA[

   这里写VBS

]]>

</msxsl:script>

<msxsl:script language="javaScript" implements-prefix="MissdeJS">

<![CDATA[

   这里写JS

]]>


调用:

<xsl:value-of select="Missde:函数名()"/>

<xsl:value-of select="MissdeJS:函数名()"/>


XSL使用自定义函数时的特殊情况

1.参数即可以是元素值、又可以是字符串

 解决办法:使用自定义函数函数。

 因为刚学xsl,xml,对相关属性不甚明了,所以所用方法应该有待完善。

 a)用VBS判断:

     function getnode(node)

      dim str

      if IsObject(node) then

       if(Node.Length>0)then

        str=node.item(0).TEXT

      else

        str=""

        end if

      else

       str=node

      end if

      getnode=str

     End function

 b)用JS判断

    function node(str){

     return str[0]?str[0].text:str;

    }


2.使用自定义函数,简化XSL代码

 这里说的是特殊情况。比如说,需要在xsl引用一个动态地址,如js文件、img、url等

 以引用script为例:

 function script(name,a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s){

  name=name.toLowerCase=="js"?"javascript":"vbscript";

  var url="";

  var str=new Array(a,b,c,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s);

  for(var i=0;i<str.length;i++){

    if(str[i]!=undefined){

      url+=node(str[i]);

    }

  }

  return "<script language='"+name+"' type='text/"+name+"' src='"+url+"'></script>";

 }


XSL排序

  <xsl:for-each select="student"> 

    <xsl:sort select="id" order='ascending'/>    以id顺序排列

    <xsl:sort select="name" order='descending'/>  以name倒序排列

  </xsl:for-each>

-------------------------------------------------

下面事件中,包括了排序、条件查询、及多条件合并查询

<xsl:for-each select="body/msg[sort='pro' and position() &lt; 4]">

<xsl:sort select="isgoodtime"   order='descending'/>

</xsl:for-each>

xsl条件查询

  进行大小于比较的时候,先进行编码。如>写成&lt;


xsl模板合并

  方法一(二个)

    用它引用<xsl:import href=""/>

    用它打印<xsl:apply-imports/>

  方法二(多个)

    主.xsl 调用

    <xsl:import href="head.xsl"/>

    <xsl:import href="foot.xsl"/>

    <xsl:template match="html">

    <xsl:call-template name="head"/>

      本页主内容

    <xsl:import href="foot.xsl"/>

    </xsl:template>


    子.xsl

    <xsl:template name="head">

    aaa

    </xsl:template>


xsl模板合并时,主模板控制子模板head中的title

  (暂用下面办法)

  a).建全局变量title

  b).head.xsl 引用自定义函数 showtitle()

  c). main.xsl 引入head.xsl之前为全局变量title赋值。


   JS:

  var title="";

  function gettitle(a,b,c,e,f,g,h){

    var str=new Array(a,b,c,e,f,g,h)

    for(var i=0;i<str.length;i++){

      if(str[i]!=undefined){

        title+=node(str[i])+ " - ";

      }

    }

    return "";

  }

  function showtitle(){

    return title;

  }