在 OpenOffice Calc 的 XSLT 导出过滤器中指定工作表
Specify worksheet in XSLT export filter for OpenOffice Calc
我正在使用 XSLT 导出过滤器将我的 OpenOffice Calc 文件的一部分提取到 XML 文件中。我的过滤器基于 this SO question 中的第二个答案,它工作正常,直到我将另一个 Worksheet 添加到 Calc 文件。
现在过滤器应用于每个作品sheet,由于它们完全不同,结果 XML 是垃圾。
我可以指定导出时要对哪个作品sheet应用过滤器吗?比如使用 sheet?
的名称或顺序位置
编辑:
excel看起来like this。
如您所见,还有第二个作品sheet,我想对其应用另一个 XSLT 过滤器。
当前屏幕截图中 table 的过滤器如下所示(当只有一个传播时它工作正常sheet):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" exclude-result-prefixes="office table text">
<xsl:template match="/">
<command name="CreateTitle">
<xsl:apply-templates select="/*/office:body" />
</command>
</xsl:template>
<xsl:template match="office:body">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="office:spreadsheet">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="office:spreadsheet/table:table">
<title><xsl:value-of select="table:table-row[2]/table:table-cell[1]/text:p" /></title>
<titleDesc><xsl:value-of select="table:table-row[2]/table:table-cell[2]/text:p" /></titleDesc>
<institute><xsl:value-of select="table:table-row[2]/table:table-cell[3]/text:p" /></institute>
<contractType><xsl:value-of select="table:table-row[2]/table:table-cell[4]/text:p" /></contractType>
</xsl:template>
</xsl:stylesheet>
这是输入格式:http://pastebin.com/tLyFKU4e(有点长)
spreadsheet
元素似乎包含各种 table
个子元素,因此如果您只想处理第一个 table(假设它代表第一个工作表),则使用
<xsl:template match="office:body">
<xsl:apply-templates select="office:spreadsheet/table:table[1]"/>
</xsl:template>
与其他模板一起设置根元素,当然还有从 table
中提取数据的模板
<xsl:template match="/">
<command name="CreateTitle">
<xsl:apply-templates select="/*/office:body" />
</command>
</xsl:template>
<xsl:template match="office:spreadsheet/table:table">
<title><xsl:value-of select="table:table-row[2]/table:table-cell[1]/text:p" /></title>
<titleDesc><xsl:value-of select="table:table-row[2]/table:table-cell[2]/text:p" /></titleDesc>
<institute><xsl:value-of select="table:table-row[2]/table:table-cell[3]/text:p" /></institute>
<contractType><xsl:value-of select="table:table-row[2]/table:table-cell[4]/text:p" /></contractType>
</xsl:template>
我正在使用 XSLT 导出过滤器将我的 OpenOffice Calc 文件的一部分提取到 XML 文件中。我的过滤器基于 this SO question 中的第二个答案,它工作正常,直到我将另一个 Worksheet 添加到 Calc 文件。
现在过滤器应用于每个作品sheet,由于它们完全不同,结果 XML 是垃圾。
我可以指定导出时要对哪个作品sheet应用过滤器吗?比如使用 sheet?
的名称或顺序位置编辑:
excel看起来like this。
如您所见,还有第二个作品sheet,我想对其应用另一个 XSLT 过滤器。
当前屏幕截图中 table 的过滤器如下所示(当只有一个传播时它工作正常sheet):
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" exclude-result-prefixes="office table text">
<xsl:template match="/">
<command name="CreateTitle">
<xsl:apply-templates select="/*/office:body" />
</command>
</xsl:template>
<xsl:template match="office:body">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="office:spreadsheet">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="office:spreadsheet/table:table">
<title><xsl:value-of select="table:table-row[2]/table:table-cell[1]/text:p" /></title>
<titleDesc><xsl:value-of select="table:table-row[2]/table:table-cell[2]/text:p" /></titleDesc>
<institute><xsl:value-of select="table:table-row[2]/table:table-cell[3]/text:p" /></institute>
<contractType><xsl:value-of select="table:table-row[2]/table:table-cell[4]/text:p" /></contractType>
</xsl:template>
</xsl:stylesheet>
这是输入格式:http://pastebin.com/tLyFKU4e(有点长)
spreadsheet
元素似乎包含各种 table
个子元素,因此如果您只想处理第一个 table(假设它代表第一个工作表),则使用
<xsl:template match="office:body">
<xsl:apply-templates select="office:spreadsheet/table:table[1]"/>
</xsl:template>
与其他模板一起设置根元素,当然还有从 table
中提取数据的模板 <xsl:template match="/">
<command name="CreateTitle">
<xsl:apply-templates select="/*/office:body" />
</command>
</xsl:template>
<xsl:template match="office:spreadsheet/table:table">
<title><xsl:value-of select="table:table-row[2]/table:table-cell[1]/text:p" /></title>
<titleDesc><xsl:value-of select="table:table-row[2]/table:table-cell[2]/text:p" /></titleDesc>
<institute><xsl:value-of select="table:table-row[2]/table:table-cell[3]/text:p" /></institute>
<contractType><xsl:value-of select="table:table-row[2]/table:table-cell[4]/text:p" /></contractType>
</xsl:template>