0

各tdの幅を取得しようとすると問題が発生します。現在、列幅内の空白の値を取得しています。各tdの値を取得するにはどうすればよいですか。

 <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>

HTMLに基づく->

<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>

(..等)

列幅が空白であることに注意してください...

4

1 に答える 1

2

問題は、tds に属性がないことです。それぞれでテンプレートをwidth呼び出して、その出力から幅を取得するか、属性から幅を直接抽出する必要があります。次のようなものです。tokenize-styletdstyle

  <xsl:attribute name="column-width"> 
     <xsl:value-of select="normalize-space(substring-before(substring-after(@syle,'width:'),';'))" /> 
  </xsl:attribute> 
于 2012-05-01T14:48:34.510 に答える