2011-04-29 141 views
4

我一直在尝试将我的docX文件转换为我自定义的XML。我的用户希望将他们的数据转换为XML,以便在他们的Web应用程序中更轻松地进行内容查询,并且他们希望输入来自他们的docX。将docX转换为自定义XML

我曾尝试在Java中寻找转换器API,但似乎无法满足我的要求。我研究过docx4j,但意识到它只能转换为HTML和PDF。我在考虑是否存在可以输入的转换器API,例如中间转换器(XSLT),输出将是我的自定义XML,并附带有来自我的docX的数据。

有没有现存的工具?如果没有,我必须对编码我自己的转换器的方法提出任何建议,例如从openXML开始,在定制XML之前首先转换为XSL-FO?

很想听到社区的消息。

非常感谢。

+0

还未尝试使用较新的格式,但请注意以下几点:http:/ /msdn.microsoft.com/en-us/library/aa537167(v=office.11​​)。aspx – 2011-04-29 14:58:32

回答

1

据我所知,docx文件只是一个ZIP容器中的xml文件。要将这些转换为设计的某种XML格式,您需要将文件解压缩到新文件夹或内存中,加载目标Xml文档并将XSLT应用于该xml文件。我不认为你提到任何有关你的开发环境的东西,除了“docx4j”标签。你在用Java开发吗?如果是这样,恐怕我不知道什么库指向你的zip处理和xml转换库(尽管我知道它们存在,并且只需要5分钟的谷歌搜索就可以找到它们! )

要检出docx中的xml文件,只需将文件的扩展名从“.docx”更改为“.zip”,然后在您最喜爱的ZIP归档工具中打开。

0

我已经有了最好的运气保存docx作为HTML从Word。 Html不是xHtml,所以你需要对它进行整理。否则,如果您必须使用基于Word的工作流程,则工作得很好。您可以编写一个VBA脚本让Word打开一个文件并以编程方式将其保存到Html。

3

docx4j可用于通过XSLT将OpenXML转换为任意XML。

假设模板xslt和javax.xml.transform.stream。 StreamResult结果,你会做这样的事情:

 WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath)); 
     MainDocumentPart mdp = wordMLPackage.getMainDocumentPart(); 

     // DOM document to input to transform 
     org.w3c.dom.Document doc = XmlUtils.marshaltoW3CDomDocument(
       mdp.getJaxbElement());  

     XmlUtils.transform(doc, xslt, null, result); 

但是,如果你想要做的是转换为XML,然后docx4j(和Apache POI为此事),是矫枉过正。你可以直接使用OpenXML4J

尽管通过XSLT进行转换是最好的方法,但取决于目标XML是面向文档还是面向数据。

如果它是面向文档的,XSLT是一个好方法。

如果是面向数据的,您可能需要考虑内容控制数据绑定。 (还有另一种方法,称为customxml,但如果您依靠Word进行编辑,i4i专利闹剧可能会使该方法变得不合适)

+0

@Michael,我说docx4j是矫枉过正的,因为它使用JAXB解析了docx到Java对象(PO​​I使用XmlBeans做类似的事情)。但是您可能不需要访问这些对象(取决于您的目标XML的外观);您可能需要的只是解压缩docx并访问document.xml。 – JasonPlutext 2011-05-03 10:10:55

+0

@Michael,OpenXML规范的第一部分是一个非常易读的介绍。 Google“WordprocessingML入门”入门。 – JasonPlutext 2011-05-03 10:16:27