选择在XSLT所述第一和第二节点(Selecting the first and second no

2019-10-29 05:09发布

考虑下面的结构,如何在第一和基于在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> 

如何选择所述第一和第二数据occurence(没有数据元素本身,仅姓名,年龄)从列表中,其中,所述槽是等于一个不同的变量,即,第一列表具有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>

任何工作的建议,将不胜感激

Answer 1:

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

<Lastdata>
  <xsl:copy-of select="list[slot=$slotvariable]/data[1]/*" />
</Lastdata>
<prevdata>
  <xsl:copy-of select="list[slot=$slotvariable]/data[2]/*" />
<prevdata>

提示:

  • 不要使用<xsl:element>除非你有基于表达式动态命名。
  • [1]为速记[position() = 1]


Answer 2:

下面的样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:variable name="slot" select="'slot1'"/>
    <xsl:template match="/lists/list">
        <xsl:copy-of select="data[../slot=$slot][position()&lt;3]/*"/>
    </xsl:template>
</xsl:stylesheet>

应用于该源:

<lists>
    <list>
      <slot>slot1</slot>
       <data>
           <name>George</name>
           <age>7</age>  
       </data> 
       <data>
           <name>Bob</name>
           <age>22</age>  
       </data> 
       <data>
           <name>James</name>
           <age>77</age>  
       </data> 
    </list> 
    <list>
      <slot>slot2</slot>
       <data>
           <name>Wendy</name>
           <age>25</age>  
       </data> 
    </list> 
</lists>

将产生以下结果:

<name>George</name>
<age>7</age>
<name>Bob</name>
<age>22</age>


文章来源: Selecting the first and second node in XSLT
标签: xslt