2016-08-16 4 views
0

XSLTを使用してWordファイルをXMLに変換しています。テーブル内でrowspan属性を取得する方法w:vMerge from Word MLからHTMLの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でも可能ですか?

答えて

0

あなたがXSLT 3.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)]] 
) 
+0

私たちはopensource SaxonすなわちHE版のみを使用しています。 XSLT 3.0は彼の一部ではありません –

関連する問題