Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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 使用Docx4j从XML转换为Docx_Java_Xml_Docx4j - Fatal编程技术网

Java 使用Docx4j从XML转换为Docx

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

我正在使用Java Docx4j库将.docx文件转换为其.xml表示形式,将xml存储在数据库中,然后将xml转换回.docx文件

到目前为止,我可以成功地将.docx文件转换为XML并存储在数据库中。但是,我在将XML转换回.docx表单时遇到问题。无论如何,我都不会编辑XML。如果我在Word中打开XML文件,它会显示良好

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"));