2016-04-12 109 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存在,我不确定此代码是否可以工作。