簡體   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