2010-03-16 36 views
0

對於文檔中的每個表格,我想將其定義爲「簡單」或「複雜」。如果每行至多包含兩列,那麼它應該是「簡單的」,否則應該是「複雜的」。如何與xsltXSLT:整個表格的列數

+2

向我們展示您的XML,很難理解您需要XSLT做什麼。 – 2010-03-16 14:02:31

+0

對不起。這是一個常見的表格,看起來像HTML標記,每行中有任意數量的單元格。 – Kalinin 2010-03-17 07:08:50

回答

1

對不起,你花時間了。我想出了一個解決方案。這是答案,如果有人需要。

<xsl:template match="TABLE"> 
<xsl:variable name="tableClass"> 
    <xsl:choose> 
     <xsl:when test="count(TBODY/TR[count(child::*) = 2]) = count(TBODY/TR)"> 
      simple 
     </xsl:when> 
     <xsl:otherwise> 
      complicated 
     </xsl:otherwise> 
    </xsl:choose> 
</xsl:variable> 
<table class="{$tableClass}"> 
    <xsl:apply-templates select="CAPTION"/> 
    <xsl:apply-templates select="TBODY"/> 
    and so on....... 
</table> 

+1

' Tomalak 2010-03-16 14:34:19

+0

對不起,但您的建議不適合,列數必須等於2,而不是<= 2.但所有的細節。謝謝。 – Kalinin 2010-03-17 07:06:12

0

鑑於兩個XML文檔,A:

<base> 
    <row> 
    <col1 value='x'/> 
    <col2/> 
    </row> 
    <row> 
    <col1 value='y'/> 
    <col2/> 
    </row> 
    <row> 
    <col1 value='z'/> 
    <col2/> 
    </row> 
</base> 

和B:

<base> 
    <row> 
    <col1/> 
    <col2/> 
    <col3/> 
    </row> 

    <row> 
    <col1/> 
    <col2/> 
    </row> 
</base> 

這個XSL會,如果它是 「簡單」 和 「複雜的」 基於告訴關於每個頂層行元素下的子元素的數量:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text" encoding = "iso-8859-1"/> 

    <!-- is the xml simple? --> 
    <!-- simple, in this case, means each row has 2 or fewer columns --> 


    <xsl:variable name="maxColCount"> 
    <xsl:for-each select="//base/row"> 
     <xsl:sort data-type="number" order="descending"/> 
     <xsl:if test="position()=1"><xsl:value-of select="count(./*)"/></xsl:if> 
    </xsl:for-each> 
    </xsl:variable> 


    <xsl:template match="/"> 
    <xsl:choose> 
     <xsl:when test="$maxColCount > 2">complex</xsl:when> 
     <xsl:otherwise>simple</xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

結果是:A很簡單,B很複雜。

+0

你忘了給你添加select =「count(./*)」string 。 沒有它,排序不起作用。 – Kalinin 2010-03-17 06:58:35