我一直在尝试将我的docX文件转换为我定制的XML。我的用户希望他们的数据转换为此XML,以便在他们的Web应用程序中更容易地进行内容查询,并且他们希望输入来自他们的docX。
我曾尝试在Java中寻找转换器API,但似乎都不符合我的要求。我查看了docx4j,但意识到它只转换为HTML和PDF。我在想是否存在我可以输入的转换器API,例如,中间转换器(XSLT),输出将是我的自定义XML,包含来自docX的数据。
是否有现成的工具?如果没有,那么我在编写自己的转换器时必须采取的方法有任何建议,例如:从openXML开始,在自定义XML之前首先转换为XSL-FO?
很想听到社区的消息。
非常感谢。
答案 0 :(得分: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专利闹剧可能会使这种方法不可取)
答案 1 :(得分:1)
据我所知,docx文件只是ZIP容器中的xml文件。要将这些转换为您设计的某种XML格式,您需要解压缩文件(进入新文件夹或内存),加载目标Xml文档,并将XSLT应用于该xml文件。我不认为你提到你的开发环境,除了“docx4j”标签..你是用Java开发的吗?如果是这样,我恐怕我不知道哪些库指向你的zip处理和xml转换库(虽然我知道它们存在,并且它只需要5分钟的谷歌搜索才能找到它们! )
要查看docx中的xml文件,只需将文件的扩展名从“.docx”更改为“.zip”,然后在您喜欢的ZIP存档工具中打开。
答案 2 :(得分:0)
我从Word中获得了运气最好的docx作为html。 Html不是xHtml所以你需要对它进行整理。否则,如果必须使用基于Word的工作流程,它的工作方式相当不错。您可以编写VBA脚本让Word打开文件并以编程方式将其保存到Html。