2016-04-12 146 views
0

空列我有一個類似的問題,這個回答在這裏 Strip empty columns from calstable model剝離從CALS

本質上相同的問題稍微複雜: 我有一大堆的多個XML文件CALS模型表。其中的一些有一個空的最後一列,如在這個例子中

  <table frame="none"> 
      <tgroup cols="4" colsep="0" rowsep="0"> 
       <colspec colname="1" colnum="1" colwidth="75pt"/> 
       <colspec colname="2" colnum="2" colwidth="63pt" align="center"/> 
       <colspec colname="3" colnum="3" colwidth="63pt" align="center"/> 
       <colspec colname="4" colnum="4" colwidth="63pt"/> 
       <thead> 
        <row valign="bottom"> 
        <entry> </entry> 
        <entry>No. 9</entry> 
        <entry>No. 10</entry> 
        <entry> </entry> 
        </row> 
       </thead> 
       <tbody> 
        <row> 
        <entry>Max. size:</entry> 
        <entry>10.5 m.</entry> 
        <entry>6.7 m.</entry> 
        <entry> </entry> 
        </row> 
        <row> 
        <entry>Length:</entry> 
        <entry>210 m.</entry> 
        <entry>100 m.</entry> 
        <entry> </entry> 
        </row> 
        <row> 
        <entry>Depth:</entry> 
        <entry>11.0</entry> 
        <entry>7.0</entry> 
        <entry> </entry> 
        </row> 
       </tbody> 
      </tgroup> 
     </table> 

我想刪除最後的空列。另一篇文章的答案解決了很多例子。但是,在表格中使用合併單元格的地方,它不起作用。

的騎乘行將被編碼爲

    <row> 
        <entry namest="1" nameend="3">Notes: This table is short</entry> 
        <entry> </entry> 
        </row> 

我需要什麼調整,以使其他的解決方案佔跨行?

TIA

回答

0

我從JLRishe

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <!-- This key will allow us to select all the entries in a column based on their 
     column number --> 
    <xsl:key name="kColumn" match="entry" 
     use="count(. | preceding-sibling::entry[not(@namest)]) 
     + count(preceding-sibling::entry[@namest]) 
     + sum(preceding-sibling::entry/@nameend) 
     - sum(preceding-sibling::entry/@namest)"/> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="tgroup"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*" /> 
      <!-- Select colspecs whose column isn't all blank --> 
      <xsl:apply-templates 
       select="colspec[key('kColumn', position())[normalize-space(.)]]" /> 
      <xsl:apply-templates select="node()[not(self::colspec)]" /> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="colspec"> 
     <colspec colname="{position()}" colnum="{position()}"> 
      <xsl:apply-templates 
       select="@*[local-name() != 'colname' and local-name() != 'colnum']" /> 
      <xsl:apply-templates select="node()" /> 
     </colspec> 
    </xsl:template> 

    <!-- Omit entries that belong to all-blank columns --> 
    <xsl:template match="entry[not(key('kColumn', count(. | preceding-sibling::entry[not(@namest)]) 
     + count(preceding-sibling::entry[@namest]) 
     + sum(preceding-sibling::entry/@nameend) 
     - sum(preceding-sibling::entry/@namest))[normalize-space(.)])]" /> 
</xsl:stylesheet> 

修改樣式表我已經做了幾個測試與@namest@nameend。如果@morerows存在,我不確定此代碼是否可以工作。