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 以降) 別のノードの前にあるかどうかをテストする比較演算子があり、次のノードを@w:val='restart'let でバインドできます。次のようなものを想像できました。

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 に答える