2010-07-13 4 views
2

xml-fo를 사용하여 pdf 문서에서 테이블을 생성 중입니다.
열의 수가 동적입니다. 열은 테스트가 통과 할 때만 표시됩니다.
테스트에서 나는 XML 노드를 가리키는 $ var1, $ var2 등과 같은 변수를 사용하고 있습니다.
xml-fo pdf 테이블 : 열 수가 동적 일 때 'colspan'

뭔가가

<xsl:element name="fo:table-row"> 
    <xsl:element name="fo:table-cell" use-attribute-sets="table-cell"> 
     <xsl:attribute name="number-columns-spanned"> **???** </xsl:element> 
     <xsl:element name="fo:block">Text that spans over columns</xsl:element> 
    </xsl:element> 
</xsl:element> 
<xsl:element name="fo:table-row" use-attribute-sets="headerRow"> 
    <xsl:element name="fo:table-cell" use-attribute-sets="table-cell"> 
     <xsl:element name="fo:block">some value here</xsl:element> 
    </xsl:element> 
    <xsl:if test="$var1"> 
     <xsl:element name="fo:table-cell" use-attribute-sets="table-cell"> 
      <xsl:element name="fo:block">maybe some value here 2</xsl:element> 
     </xsl:element> 
    </xsl:if> 
    <xsl:if test="$var2"> 
     <xsl:element name="fo:table-cell" use-attribute-sets="table-cell"> 
      <xsl:element name="fo:block">maybe some value here 3</xsl:element> 
     </xsl:element> 
    </xsl:if> 
    ... 
</xsl:element> 

처럼 내가 모든 열 이상에 걸쳐 1 행을 확장하고있어했습니다. "number-columns-spanned"는 가변적이며 통과하는 테스트의 수에 따라 다릅니다.
넘버링 된 속성 번호를 올바르게 정의하기 위해 통과하는 조건 수를 동적으로 추출하는 쉬운 방법이 있습니까?

답변

3

이 같은 표현을 사용하여 변수의 내용을 셀 수 : 당신의 변수의 각 가정 것

count($var1 | $var2 | $var3 | ...) 

는 가능성이 빈 세트입니다. 값이 때로 믿을 경우

$var1 + $var2 + $var3 + ... 

: 당신의 변수는 참/거짓 값 대신 다음 경우에 당신은 거짓이 0 사실은 (적어도 내가 사용 인터프리터와) XSL의 1이라는 사실을 이용할 수 있습니다 't 노드 세트를하고, 두 부울 첫번째 논리 값으로 변환되지 않습니다

boolean($var1) + boolean($var2) + boolean($var3) + ... 

별로 그것을 처리하는 매우 우아한 방법 만 작동합니다.

According to the XPath spec, 숫자에 캐스트 할 때 부울은 실제로 이런 식으로 행동해야합니다. 알아 둘만한!

관련 문제