我正在尝试匹配在xsl匹配模式bar中作为foo元素后代出现的第一个元素并且正在挣扎.初步尝试:
<xsl:template match="//foo//bar[1]">
...
</xsl:template>
失败,因为有几个bar元素匹配.所以:
<xsl:template match="(//foo//bar)[1]">
...
</xsl:template>
但是无法编译.
棘手。我不知道这会有多高效或其他方式,但您可以彻底改变模式并将逻辑移至谓词中(允许使用除 child、attribute 和 之外的轴//):
<xsl:template match="foo//bar[not(preceding::bar/ancestor::foo)]">
(任何bara 内的foo内容,前提是在它之前没有另一个 bar-inside-a-foo )。或者,您可以尝试类似于 Muenchian 分组工作方式的关键技巧,这可能更有效
<!-- trick key - all matching nodes will end up with the same key value - all
     we care about is finding whether a particular node is the first such node
     in the document or not. -->
<xsl:key name="fooBar" match="foo//bar" use="1" />
<xsl:template match="foo//bar[generate-id() = generate-id(key('fooBar', 1)[1])]">
| 归档时间: | 
 | 
| 查看次数: | 1353 次 | 
| 最近记录: |