Xslt取节点集的指定位置记录的三种方法


2007-7-17 23:18 IT技术,xslt&xml&html&css 没有评论674
  如果我们在一个Xml中有N个子结点,我们希望取得其中的指定位置的节点,我们应该怎么做呢?我们有三种方法可以实现这个功能。
  Xml如下:
 <?xml version="1.0" encoding="UTF-8"?>  
 <Items>  
  <Item Name="001"/>  
  <Item Name="002"/>  
  ...   
 <Items>
  第一种方法,也是最笨的一种,采用结合position()函数及循环的方式,这种方法优点处是代码量较小,缺点是如果有1000个节点,就需要循环1000次,核心代码如下:
 <?xml version="1.0" encoding="gb2312"?>  
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
 <xsl:template match="/">  
  <!---取Items下大于1前小于3的节点-->  
  <xsl:for-each select="Items/*">  
   <!--用position()进行判断当前节点是否要取的范围-->  
   <xsl:if test="position() &gt; 1 and position() &lt; 6">  
    <xsl:value-of select="@Name" /><br />  
   </xsl:if>  
  </xsl:for-each>  
 </xsl:template>  
 </xsl:stylesheet>
  第二种方法是用递归,优缺点与第一种相反,核心代码如下:
 <?xml version="1.0" encoding="gb2312"?>  
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
 <!---定义结束的结束-->  
 <xsl:variable name="End">5</xsl:variable>  
 <xsl:template match="/">  
  <xsl:call-template name="ShowItem">  
   <xsl:with-param name="LoopIndex">1</xsl:with-param>  
  </xsl:call-template>  
 </xsl:template>  
 
 <xsl:template name="ShowItem">  
  <xsl:param name="LoopIndex" />  
  <xsl:value-of select="Items/Item[$LoopIndex]/@Name" /><br />  
 <!--如果节点索引小于终止节点,就递归调用,并将LoopIndex加1-->  
  <xsl:if test="$LoopIndex &lt; $End">  
   <xsl:call-template name="ShowItem">  
    <xsl:with-param name="LoopIndex" select="$LoopIndex + 1" />  
   </xsl:call-template>  
  </xsl:if>  
 </xsl:template>  
 </xsl:stylesheet>
 
  第三种方法也是最好的一种,兼有前两种方法的优点,代码量最小,也不用多次循环,主要是在select 中使用了XPath,核心代码如下:
 <?xml version="1.0" encoding="gb2312"?>  
 <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
 <xsl:template match="/">  
  <!---采用XPath取大于1前小于3的节点-->  
  <xsl:for-each select="Items/Item[position() &gt; 1 and position() &lt; 6]">  
   <xsl:value-of select="@Name" /><br />  
  </xsl:for-each>  
 </xsl:template>  
 </xsl:stylesheet>

  

 

无觅相关文章插件,快速提升流量

嗯,或者你也可以收听我的微博,腾讯微博(主要用这个,其他的看我的个人介绍)

我写博客常常出现错别字,常常错得还很离谱,有时候我自己看了第二遍都骂我自个儿,但我又不习惯重复审查,纠结啊...各位看到啥错别字或者不明白的地方,请给我留言指出来,感谢感谢。

  

  • 评论敬告那些为做SEO而评论的朋友,本博不欢迎此类评论,请不要利用本博做关键字,一律封杀。

    绝不跨省追捕
    不会发垃圾邮件
    增加你的流量