0

我试图根据父母的位置来计算节点。

这是一个例子:

<tbody>
    <row>
        <entry>L1C1</entry>
        <entry>L1C2</entry>
        <entry>L1C3</entry>
    </row>
    <row>
        <entry>L2C1</entry>
        <entry morerows="1">L2C2</entry>
        <entry>L2C3</entry>
    </row>
    <row>
        <entry>L3C1</entry>
        <entry>L3C3</entry>
    </row>
</tbody>

对于 each entry,我想计算其属性大于取决于行位置的数字entry的前面元素的元素数。rowmorerows

我有这样的事情:

<xsl:variable name="nbRows">
    <xsl:value-of select="count(ancestor::tbody/row)">
    </xsl:value-of>
</xsl:variable>

<xsl:value-of select="count(parent::row/preceding-sibling::row/entry[@morerows &gt; ($nbRows - count(current()/../preceding-sibling::row))])">
</xsl:variable>"/>

但正如你可以想象的那样,这是行不通的。

有人可以帮我弄这个吗?

4

1 回答 1

2

如果我正确理解了这个问题,这应该可以完成工作:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="row">
    <xsl:variable name="nRows" select="count(../row)"/>
    <xsl:variable name="precedingEntries" select="preceding-sibling::row/entry"/>
    <xsl:variable name="minMoreRows" select="$nRows - position() + 1"/>
    <n>
      <xsl:value-of select="count($precedingEntries[@morerows>=$minMoreRows])"/>
    </n>
  </xsl:template>

  <xsl:template match="/">
    <root>
      <xsl:apply-templates/>
    </root>
  </xsl:template>

</xsl:stylesheet>

输出 - 当应用于问题中的示例时 - 是:

<root>
    <n>0</n>
    <n>0</n>
    <n>1</n>
</root>
于 2013-05-06T15:24:16.960 回答