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

  如果我们在一个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>

  

 
  

注意:本文为我的独立博客镜像博客,自发表不再更新,原文可能随时被更新,敬请访问原文。同时,请大家不要在此评论,如果有什么看法,请点击这里:http://iove.net/1705/

本文来自http://iove.net,欢迎转载,转载敬请保留相关链接,否则视为侵权,原文链接:http://iove.net/1705/

转载于:https://www.cnblogs.com/conis/archive/2007/07/18/1720582.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值