2016-04-12 3 views
0

У меня был подобный вопрос, это ответил здесь Strip empty columns from calstable modelвскрышные пустые столбцы из CALS

По существу та же проблема с несколько большей сложностью: У меня есть куча типовых таблиц CALS через несколько файлов XML. Некоторые из них имеют пустую последнюю колонку, например, как в этом примере

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

Какие приспособления бы мне нужно сделать с другим решением для учета автоконтейнеровозов строк?

ТИА

ответ

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.

Смежные вопросы