我遇到了一个问题,在尝试了几种不同的解决方案后,我陷入了困境。
我有一个从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文档,但找不到该问题的解决方案。
答案 0 :(得分:1)
有很多方法可以解决您的问题。此处的示例使用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数据绑定。
答案 1 :(得分:0)
我不确定,但可能会对您有所帮助。此代码快照会将您的.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);
}
}