2016-08-16 3 views
0

Мы конвертируем Word File в XML с помощью XSLT. Как мы можем получить атрибут rowspan в таблицах.w: vMerge от Word ML до rowspan в HTML

Это код 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

Мы используем только версию Saxon версии i.e. с открытым исходным кодом. XSLT 3.0 не является частью HE –

Смежные вопросы