Java 使用Docx4j从XML转换为Docx
我正在使用Java Docx4j库将.docx文件转换为其.xml表示形式,将xml存储在数据库中,然后将xml转换回.docx文件 到目前为止,我可以成功地将.docx文件转换为XML并存储在数据库中。但是,我在将XML转换回.docx表单时遇到问题。无论如何,我都不会编辑XML。如果我在Word中打开XML文件,它会显示良好Java 使用Docx4j从XML转换为Docx,java,xml,docx4j,Java,Xml,Docx4j,我正在使用Java Docx4j库将.docx文件转换为其.xml表示形式,将xml存储在数据库中,然后将xml转换回.docx文件 到目前为止,我可以成功地将.docx文件转换为XML并存储在数据库中。但是,我在将XML转换回.docx表单时遇到问题。无论如何,我都不会编辑XML。如果我在Word中打开XML文件,它会显示良好 String inputFilePath = args[0]; WordprocessingMLPackage wmlPackage = Docx4J.load(new
String inputFilePath = args[0];
WordprocessingMLPackage wmlPackage = Docx4J.load(new File(inputFilePath));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Docx4J.save(wmlPackage, baos, Docx4J.FLAG_SAVE_FLAT_XML);
DatabaseController databaseController = new DatabaseController();
databaseController.commitXMLToDatabase(baos, "file-sample_1MB"); // Add the XML and filename to DB
String xml = databaseController.retrieveDocument("file-sample_1MB");
// Issue with the code below:
WordprocessingMLPackage testPkg = WordprocessingMLPackage.createPackage();
testPkg.getMainDocumentPart().unmarshal(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
testPkg.save(new File("src/main/resources/test1.docx"));
我得到下面的错误(我已经删除了列出的一些方案URL)
线程“main”javax.xml.bind.JAXBException中的异常
-除此之外:
[javax.xml.bind.UnmarshalException
-除此之外:
[com.sun.istack.SAXParseException2;行号:1;列号:133;意外元素(uri:http://schemas.microsoft.com/office/2006/xmlPackage,本地:“包”)。预期的元素为,,,,,,,,]]
位于org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.unmarshal(JaxbXmlPartXPathAware.java:586)
位于org.docx4j.openpackaging.parts.JaxbXmlPartXPathAware.unmarshal(JaxbXmlPartXPathAware.java:346)
位于DocxToXML.main(DocxToXML.java:37)
原因:javax.xml.bind.UnmarshalException
任何帮助都将不胜感激。如果.docx和.xml文件有帮助的话,我可以发布它们。现在修复了它。我现在使用的代码如下:
// retrieveDocument() gets the data from DB Blob as a byte[] Array
// and returns an InputStream
InputStream xml = databaseController.retrieveDocument("Test1");
WordprocessingMLPackage pkg = Docx4J.load(xml);
Docx4J.save(pkg, new File("src/main/resources/output/test1.docx"));
// retrieveDocument() gets the data from DB Blob as a byte[] Array
// and returns an InputStream
InputStream xml = databaseController.retrieveDocument("Test1");
WordprocessingMLPackage pkg = Docx4J.load(xml);
Docx4J.save(pkg, new File("src/main/resources/output/test1.docx"));