给定以下结构,如何根据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>
如何从列表中选择第一次和第二次出现的数据(没有数据元素本身,只有名称,年龄),其中插槽等于不同的变量,即第一个列表具有{{1} },但我需要第二个列表中的数据,slot=02
。但是,只要slot=01
我尝试了以下声明,但它没有产生任何结果:
slot=$slotvariable
任何有效的建议都将受到赞赏
答案 0 :(得分:5)
如果我理解你的问题,那么:
<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]
答案 1 :(得分:0)
以下样式表:
<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()<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>