2010-03-16 1 views
0

문서의 각 테이블에 대해 "단순"또는 "복잡"으로 정의하고 싶습니다. 각 행에 최대 2 개의 열이 포함되어 있으면 "단순"해야하며 그렇지 않으면 복잡해야합니다.XSLT : 전체 테이블 열 수

xslt으로 어떻게해야합니까?

+2

XML을 표시하면 XSLT에 필요한 것이 무엇인지 이해하기 어렵습니다. –

+0

죄송합니다. 이것은 각 행에 임의의 수의 셀이있는 HTML 마크 업과 비슷한 공통 테이블입니다. – Kalinin

답변

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

+0

미안하지만 귀하의 제안이 맞지 않아서 열의 수가 2 <= 2. 그러나 모든 세부 사항. 고맙습니다. – Kalinin

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 (./*)"를 추가하는 것을 잊어 버렸습니다. 없으면 정렬이 작동하지 않습니다. – Kalinin