在XSLT中选择第一个和第二个节点

use*_*850 0 xslt

给定以下结构,如何基于XSLT中的谓词从文档中复制第一个和第二个节点及其所有元素:

<list>
  <slot>xx</slot>
   <data>
       <name>xxx</name>
       <age>xxx</age>  
   </data>      
   <data>
       <name>xxx</name>
       <age>xxx</age>  
   </data> 
   <data>
       <name>xxx</name>
       <age>xxx</age>  
   </data> 
</list> 
<list>
  <slot>xx</slot>
   <data>
       <name>xxx</name>
       <age>xxx</age>  
   </data> 
   <data>
       <name>xxx</name>
       <age>xxx</age>  
   </data> 
   <data>
       <name>xxx</name>
       <age>xxx</age>  
   </data> 
</list> 
Run Code Online (Sandbox Code Playgroud)

如何从列表中选择第一个和第二个数据(没有数据元素本身,只有名称,年龄),其中插槽等于不同的变量,即第一个列表具有slot=02,但我需要来自第二个清单,在哪里slot=01.但是只要一个插槽列表的顺序并不重要slot=$slotvariable.

我尝试了以下声明,但它没有产生任何结果:

<xsl:element name="{'Lastdata'}">
  <xsl:copy-of select="list/data[position()=1 and slot = $slotvariable]" />
</xsl:element>
<xsl:element name="{'prevdata'}">
  <xsl:copy-of select="list/data[position()=2 and slot = $slotvariable]" />
</xsl:element>
Run Code Online (Sandbox Code Playgroud)

任何工作建议将不胜感激

Tom*_*lak 5

如果我理解你的问题,那么:

<Lastdata>
  <xsl:copy-of select="list[slot=$slotvariable]/data[1]/*" />
</Lastdata>
<prevdata>
  <xsl:copy-of select="list[slot=$slotvariable]/data[2]/*" />
<prevdata>
Run Code Online (Sandbox Code Playgroud)

提示:

  • <xsl:element>除非您具有基于表达式的动态名称,否则请勿使用.
  • [1] 是一个简写 [position() = 1]