使用XSLT 1.0选择包含值的第一个节点的位置

时间:2017-11-28 14:56:22

标签: xml xslt xslt-1.0

我有以下结构:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
  <cd>
    <title>title1</title>
  </cd>
  <cd>
    <title>title1</title>
  </cd>
  <cd>
    <title>title2</title>
  </cd>
  <cd>
    <title>title2</title>
  </cd>
  <cd>
    <title>title2</title>
  </cd>
  <cd>
    <title>title2</title>
  </cd>
  <cd>
    <title>title4</title>
  </cd>
  <cd>
    <title>title5</title>
  </cd>
 </catalog>

有没有办法知道包含title2的第一个<cd>的位置?

我试过

<xsl:value-of select="count(catalog/cd[contains(., 'title2')])"/>

<xsl:value-of select="count(catalog/cd[./title='title2']/preceding-sibling::*)" />

但它们会计算包含title2

的节点

2 个答案:

答案 0 :(得分:1)

我认为表达式应该是

<xsl:value-of select="count(//catalog/cd[1]/following-sibling::cd[title='title2'][1]/preceding-sibling::cd)+1" />

答案 1 :(得分:0)

另外,如果for-each / catalog / cd想要找到第一个/title = 'title2'但是从当前for-each位置开始,你可以使用

<xsl:value-of select="count(current()[1]/following-sibling::cd[title='title2'][1]/preceding-sibling::cd)+1" />

这正是我需要的。谢谢@gtosto!