0

我们正在使用 XSLT 将 Word 文件转换为 XML。我们如何在表中获取 rowspan 属性。

这是实现此目的的 XSLT 代码。

<xsl:template match="w:tc">
    <xsl:choose>
        <xsl:when test="w:tcPr/w:vMerge[@w:val='restart'] or w:tcPr[not(w:vMerge)]">
            <td>
                <xsl:if test="w:tcPr/w:gridSpan">
                    <xsl:attribute name="colspan" select="w:tcPr/w:gridSpan/@w:val"/>
                </xsl:if>
                <xsl:if test="w:tcPr/w:vMerge[@w:val='restart']">
                <xsl:value-of select="count(parent::w:tr/following-sibling::w:tr[w:tc/w:tcPr/w:vMerge[not(@w:val)]])"/>
                </xsl:if>
                <xsl:apply-templates/>
            </td>
        </xsl:when>
    </xsl:choose>
</xsl:template>

但是,此代码正在计算所有行。我需要将计数限制为下一个@w:val='restart'。这在 XSLT 中可行吗?

4

1 回答 1

0

如果您使用的是 XSLT 3.0,则有<<比较运算符可以测试一个节点是否在另一个节点之前(从 2.0 开始),您可以使用let@w:val='restart'绑定下一个。我可以想象以下内容:

let $guard := parent::w:tr/following-sibling::w:tr[@w:val='restart'][1]
  (: Note: I probably got the above XPath wrong so it needs fine-tuning :)
return count(
  parent::w:tr/following-sibling::w:tr
    [. << $guard]
    [w:tc/w:tcPr/w:vMerge[not(@w:val)]]
)
于 2016-08-16T07:12:36.523 回答