繁体   English   中英

Java-将XML文件转换为Docx文件

[英]Java - Convert XML file to Docx file

我遇到了一个问题,在尝试了几种不同的解决方案之后,我陷入了困境。

我有一个从Word模板生成的XML文件模板。 我将此XML文档转换为字符串,然后在其中搜索关键字,然后将其替换为另一个字符串。 然后,我再次从该字符串创建XML文档:

String xmlAsString = "XYZ"; // My XML String    

    try {
            java.io.FileWriter fw = new FileWriter("src/test/resources/test.xml");
            fw.write(xmlAsString);
            fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

现在,我想将此XML文档转换回有效的DOCX文档,但找不到该问题的解决方案。

有很多方法可以解决您的问题。 此处的示例使用docx4j。

首先是简单的内容替换(例如,将“ $ {titleofproject}”替换为“我是标题”); 参见https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/VariableReplace.java,但这是脆弱的(拆分运行),并且仅限于简单的文本替换。

第二个是在XML级别替换MainDocument部分(document.xml)中的内容:

String xml = wordMLPackage.getMainDocumentPart().getXML();
// do something
String result = xml;
// now inject your result contents
wordMLPackage.getMainDocumentPart().unmarshal(
        new ByteArrayInputStream(result.getBytes(StandardCharsets.UTF_8)));

第三是使用FlatOPC XML(整个zip文件在一个XML文件中表示); 参见https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/ConvertOutFlatOpenPackage.java和ConvertInFlatOpenPackage.java

但是,与上面的XML级别相比,更好的替代方法通常是使用内容控制XML数据绑定。

我不确定,但可能会对您有帮助。 此代码快照会将您的.xml文件转换为.docx文件。

public class ReadXmlFile {       
        public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 

            File xmlFile = new File("inFile.xml"); 

            Reader fileReader = new FileReader(xmlFile); 
            BufferedReader bufReader = new BufferedReader(fileReader); 
            StringBuilder sb = new StringBuilder(); 
            String line = bufReader.readLine();

            Writer out = new FileWriter("outFile.docx");      

            while( line != null)
            { 
                sb.append(line).append("\n");  
                line = bufReader.readLine();
                if(line !=null)                    
                 out.write(line);
              } 
            out.close();
            fileReader.close();

            String xml2String = sb.toString();
            System.out.println(xml2String);

          }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM