2012-05-01 26 views
0

各tdの幅を取得しようとする際に問題が発生しました。現在は列幅内に空白の値が表示されていますが、各tdの値はどのように取得されますか。 HTMLに基づいてXSL - テーブル幅を計算する

<xsl:template match="table"> 
    <fo:table table-layout="fixed"> 
    <xsl:call-template name="tokenize-style"/> 
     <!-- Calculate the table cols... --> 
     <xsl:for-each select="tbody/tr[1]/td"> 
     <fo:table-column> 
      <xsl:attribute name="column-width"> 
<xsl:value-of select="@width"></xsl:value-of> 

      </xsl:attribute> 
     </fo:table-column> 
     </xsl:for-each> 
     <xsl:apply-templates select="*|text()"/> 
    </fo:table> 
    </xsl:template> 
    <xsl:template match="tbody"> 
    <fo:table-body> 
     <xsl:apply-templates select="*|text()"/> 
    </fo:table-body> 
    </xsl:template> 

- >

<table class="te-tablerenderer" style="width: 170mm; text-align: left;"> 
      <tbody style="text-align: left;"> 
       <tr class="" style="text-align: left;"> 
        <td style="width: 141px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(255, 255, 255); border-right-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255); border-left-color: rgb(255, 255, 255); "> </td> 
        <td style="width: 143px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(255, 255, 255); border-right-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255); border-left-color: rgb(255, 255, 255); ">   
        <b>Postcode:</b>   
        </td>  
        <td class="GENTICS_Table_Cell_active" 
         style="width: 325px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(255, 255, 255); border-right-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255); border-left-color: rgb(255, 255, 255); ">   
        djnds fnjksdnf  
        </td>   
        <td style="width: 33px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-color: rgb(255, 255, 255); border-right-color: rgb(255, 255, 255); border-bottom-color: rgb(255, 255, 255); border-left-color: rgb(255, 255, 255); ">   </td>  
       </tr> 
      </tbody> 
     </table> 

注:これは私が要素のためにすべての私のスタイルを取得したいとき、私が呼び出すテンプレートです:

<xsl:template name="tokenize-style"> 
    <xsl:param name="pString" select="string(@style)"/> 
    <xsl:choose> 
     <xsl:when test="not($pString)"/> 
     <xsl:when test="contains($pString,';')"> 
     <xsl:call-template name="tokenize-style"> 
      <xsl:with-param name="pString" 
       select="substring-before($pString,';')"/> 
     </xsl:call-template> 
     <xsl:call-template name="tokenize-style"> 
      <xsl:with-param name="pString" 
       select="substring-after($pString,';')"/> 
     </xsl:call-template> 
     </xsl:when> 
     <xsl:otherwise> 
     <xsl:attribute name="{normalize-space(substring-before($pString,':'))}"> 
      <xsl:value-of select="normalize-space(substring-after($pString,':'))"/> 
     </xsl:attribute> 
     </xsl:otherwise> 
    </xsl:choose> 
    </xsl:template> 

出力

<fo:table table-layout="fixed" width="170mm" text-align="left"> 
        <fo:table-column column-width=""/> 
        <fo:table-column column-width=""/> 
        <fo:table-column column-width=""/> 
        <fo:table-column column-width=""/> 
        <fo:table-body> 
        <fo:table-row> 
         <fo:table-cell padding-start="1pt" padding-end="1pt" padding-before="1pt" padding-after="1pt" 
             padding-top="1pt" 
             padding-bottom="1pt"> 
          <fo:block> </fo:block> 
         </fo:table-cell> 

(..etc)

列幅は空白になって...

答えて

2

問題はtd sがwidth属性を持っていないということです - あなたは、各tdであなたのtokenize-styleテンプレートを呼び出す必要がありますその後、その出力から幅を取得、またはstyle属性から直接幅を抽出 - このような何か:

<xsl:attribute name="column-width"> 
    <xsl:value-of select="normalize-space(substring-before(substring-after(@syle,'width:'),';'))" /> 
    </xsl:attribute> 
+0

をおかげで、私は今、これをテストするつもりです... – Haroon

関連する問題