XSL - 根据父母计算节点'位置

时间:2013-05-06 14:02:04

标签: xslt

我正在尝试根据父母的位置来计算节点。

这是一个例子:

<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>

对于每个entry,我想计算其entry元素的row元素的数量,这些元素的属性morerows大于取决于位置的数字<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>"/> 这一行。

我有这样的事情:

{{1}}

但是你可以想象,这不起作用。

有人可以帮我这个吗?

1 个答案:

答案 0 :(得分: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>