2011-09-28 94 views
2

我知道标准定义了两个版本的ODT文件: - 一个是不同文件的档案,即meta.xml,content.xml等, - 第二个是一个大XML文件数据。 (我知道上面的http://en.wikipedia.org/wiki/OpenDocument_technical_specification#Document_Representation将ODT转换为单个XML文件

后面的版本更适合处理,但不幸的是不是由OpenOffice生成的。

问题是: 你知道任何过滤器,转换器,或任何什么可以帮助我将存档版本中的ODT文件转换为单个XML文件吗?最好的将是一个Java类。

回答

0

我通过生成XSLT样式表解决了这个问题,该样式表将ODT源文件转换为与标准“或多或少”兼容的XML文件。以下是代码。

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

     <xsl:param name="meta.file" select="'meta.xml'" /> 

     <xsl:template match="@*|node()"> 
      <xsl:copy> 
       <xsl:apply-templates select="@*|node()" /> 
      </xsl:copy> 
     </xsl:template> 

     <xsl:template match="office:document-content"> 
      <office:document> 
       <xsl:copy-of select="@*" /> 
       <xsl:variable name="meta" select="document($meta.file)/office:document-meta/office:meta" /> 
       <xsl:copy-of select="$meta" /> 
       <xsl:apply-templates /> 
      </office:document> 
     </xsl:template> 

    </xsl:stylesheet> 
4

Open Office和Libre Office都可以以“一种大XML”格式生成ODT文件。他们被称为“Flat ODT”文件。

打开一个ODT文件并使用“另存为...”。从那里您可以将文件格式更改为“Flat ODT”。

+0

然后你可以用文本编辑器打开这个文件,或者只是使用cat,你会看到格式化的xml源文件。 –

+0

你确定有一种方法可以和LibreOffice做到这一点吗?我没有在任何地方看到“Flat ODT”。 –

+0

@StéphaneLaurent:是LibreOffice支持Flat ODT文件。例如[3.4版发布说明](https://wiki.documentfoundation.org/ReleaseNotes/3.4)说:“重写扁平ODF导入和导出文件过滤器,从Java到C++,从而大大提高速度”。 – gioele