我们使用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中是可能的吗?
发布于 2016-08-16 15:12:37
如果您使用的是XSLT3.0,有一个<<比较运算符可以测试一个节点是否在另一个节点之前(从2.0开始),您可以用一个字母绑定下一个@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)]]
)https://stackoverflow.com/questions/38968183
复制相似问题