我正在尝试使用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
答案 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(因此从技术上讲,它是最后一个表格单元格,但是更早地开始了一列),它也会被替换。