如何在.ODT表中填充列?

时间:2019-05-06 06:34:35

标签: xml xslt odt

我正在尝试使用xslt修补.ODT文档(更改表中的值)。我知道如何更改表格中仅一个单元格的值,但是如何填充整个列?

这是示例如何从表(row = 3,col = 3)中更改一个值

<xsl:template match="table:table[@table:name='1 level']/table:table-row[position()=3]/table:table-cell[position()=3]">
        <xsl:apply-templates select="." mode="replace">
            <xsl:with-param name="value" select="TEST"/>
        </xsl:apply-templates>
    </xsl:template>

修补之前:

      A   B   C  
 --- --- --- --- 
  1   1   1   1  
  2   1   1   1  
  3   1   1   1  
  4   1   1   1  

修补后:


      A   B    C    
 --- --- --- ------ 
  1   1   1   1     
  2   1   1   1     
  3   1   1   TEST  
  4   1   1   1     

如何通过循环更改数据来填充整列?我有xml列表,该列表来自<xsl:variable name="data" select="document('template.xml')/root"/>的文件:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
<marketDatas>
    <marketData>
        <countDeals>10</countDeals>
    </marketData>
    <marketData>
        <countDeals>20</countDeals>
    </marketData>
    <marketData>
        <countDeals>30</countDeals>
    </marketData>
</marketDatas>
<root>

,并希望通过marketDatas列表中的值更改行C1-C3。  预期输出:


      A   B     C     
 --- --- --- -------- 
  1   1   1   10   
  2   1   1   20   
  3   1   1   30   
  4   1   1   1  

1 个答案:

答案 0 :(得分:0)

您不必进行太多更改。如果您只想更改最后一个表格列,请将代码修改为:

<xsl:template match="table:table[@table:name='1 level']/table:table-row/table:table-cell[position() = last()]">
    <xsl:variable name="currRow" select="count(parent::table:table-row/preceding-sibling::table:table-row) + 1"/>
    <xsl:apply-templates select="." mode="replace">
        <xsl:with-param name="value" select="$data/root/marketDatas/marketData[$currRow]/countDeals"/>
    </xsl:apply-templates>
</xsl:template>

这应该与表的最后一行单元格的每一行匹配。如果您始终想更改第三行,请不要替换“ position()= 3”。请注意,如果您使用跨度,这也可以更改其他行。如果您的最后一个表格单元格的跨度为2(因此从技术上讲,它是最后一个表格单元格,但是更早地开始了一列),它也会被替换。

  • 更新版本:未经测试,但应该可以使用。如果未声明$ value或为空(string-length($ value)= 0),请考虑实施后备广告。