Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将ODT转换为单个XML文件_Java_Xml_Odf_Odt - Fatal编程技术网

Java 将ODT转换为单个XML文件

Java 将ODT转换为单个XML文件,java,xml,odf,odt,Java,Xml,Odf,Odt,我知道标准定义了ODT文件的两个版本: -一个是不同文件的存档,即meta.xml、content.xml等, -第二个是一个包含所有数据的大XML文件。 (我从上面知道) 后一个版本更适合处理,但遗憾的是,它不是由OpenOffice生成的 问题是: 您知道任何过滤器、转换器或任何东西可以帮助我将归档版本中的ODT文件转换为单个XML文件吗?最好是Java类。Open Office和Libre Office都可以生成“一个大XML”格式的ODT文件。它们被称为“平面ODT”文件 打开ODT文件

我知道标准定义了ODT文件的两个版本: -一个是不同文件的存档,即meta.xml、content.xml等, -第二个是一个包含所有数据的大XML文件。 (我从上面知道)

后一个版本更适合处理,但遗憾的是,它不是由OpenOffice生成的

问题是:
您知道任何过滤器、转换器或任何东西可以帮助我将归档版本中的ODT文件转换为单个XML文件吗?最好是Java类。

Open Office和Libre Office都可以生成“一个大XML”格式的ODT文件。它们被称为“平面ODT”文件


打开ODT文件并使用“另存为…”。从那里,您可以将文件格式更改为“平面ODT”。

我通过生成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>


然后,您可以使用文本编辑器打开此文件,或者只使用cat,您将看到格式化的xml源代码。您确定有办法使用LibreOffice实现这一点吗?我在任何地方都看不到“平面ODT”。@Stéphanelant:是的,LibreOffice支持平面ODT文件。例如,说“从头写”ODF导入和导出文件从java到C++的过滤速度大大提高。谢谢。胡尔,但是你知道如何保存这个格式的文件吗?就像其他文件格式:保存->选择“opdOctupTeX(平面XML)(.FoDT)”作为右下角的格式。