在XSL模板文件中嵌入JavaScript脚本

来源:互联网 发布:福建网络通信企业排名 编辑:程序博客网 时间:2024/06/05 23:47

        假设一个XML文档如下:

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<set>
    <feature_element code="AAAAB" description="Feature description 123" /> 
    <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" /> 
 <feature_element code="AAAAB" description="Feature description 123" />  
 <feature_element code="AAAAB" description="Feature description 123" /> 
 <feature_element code="AAAAB" description="Feature description 123" /> 
 <feature_element code="AAAAB" description="Feature description 123" /> 
 <feature_element code="AAAAB" description="Feature description 123" />
 <feature_element code="AAAAB" description="Feature description 123" /> 
    .....
 
</set>

 

        其中,feature_element 可以有很多。现在要求的是在一个table的TD中显示feature(为简化起见,xml元素从略),当鼠标移到此TD中时,提示出所有feature_element,要求的显示格式是code+空格+冒号+空格+description+逗号。当字符数超过1100时,截止显示(但截取一定要完整,即每个feature_element要么不显示,要么全显示),在末尾加上提示性语句。刚开始,想了很多办法都没实现,最后终于用嵌入JavaScript脚本的方式实现。

        XSL示例如下:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
 <xsl:script><![CDATA[

  var count = 1100; //characters number limited.
  var flag = true; //flag to decide if show tail string.  
  //Function to return features codes and descriptions
  function displayFeature(featureNode)
  {
      var code = featureNode.selectSingleNode("@code");
   var desc = featureNode.selectSingleNode("@description");
   count -= code.text.length + desc.text.length + 5; //5: 3 spaces, 1 colon, 1 comma.
   
   if(count>=0)
   {    
    return code.text + " " + ":" + " " + desc.text + ", ";    
   }   
   else if(flag)   
   {
    flag = false;
    return "There are more features which cannot be displayed here.";    
   }   
   else
   {
    return "";
   }   
  }
    ]]></xsl:script>

 <xsl:template match="/">
  <xsl:apply-templates />
 </xsl:template>

<xsl:template match="set">
  <td class="feature" nowrap="nowrap">
   <xsl:attribute name="colspan"><xsl:value-of select="@colspan" /></xsl:attribute>
   <xsl:attribute name="title"
    ><xsl:for-each select="feature_element"
     ><xsl:eval>displayFeature(this)</xsl:eval></xsl:for-each
   ></xsl:attribute>
   &#160;{...}&#160;
  </td>
 </xsl:template>

</xsl:stylesheet>

原创粉丝点击