我在word文件中有一些看起来像<tag>
的标签
现在我使用docx4j获取Word文件的内容并遍历每一行并搜索此标记。当我找到一个,然后我用一个字符串替换它。但是这个我试过的代码不起作用,现在我真的不知道我怎么能意识到它!
这是我已经尝试过的代码:
WordprocessingMLPackage wpml = WordprocessingMLPackage.load(new File(path));
MainDocumentPart mdp = wpml.getMainDocumentPart();
List<Object> content = mdp.getContent();
String line;
for (Object object : content) {
line = object.toString();
if (line.contains("<tag>")) {
line.replace("<tag>", "<newTag>");
}
}
我能如何实现它的任何提示或解决方案?
答案 0 :(得分:1)
您的一个问题是修改String line
,这对任何事都没有影响。忽略此操作的line.replace("<tag>", "<newTag>");
结果。你肯定想做那个,对吧?
此外,如果您的循环中的object
不是String
,则line
和object
指向不同的对象。
您需要修改内容,而不是修改内容的方式。请阅读getting started
中还有很多示例(示例代码)如果您在阅读入门后遇到任何具体问题,我们将很乐意为您提供帮助。
答案 1 :(得分:1)
列表中的内容将是org.docx4j.wml.P(段落),或Tbl(表格)或其他块级内容。
段落包含运行,而运行又包含实际文本。
有关您想要执行的操作的建议方法,请参阅VariableReplace示例。
更好的是,考虑内容控制数据绑定。
否则,如果您想推出自己的方法,请参阅“入门指南”以了解如何遍历或使用JAXB级XPath。
答案 2 :(得分:0)
首先,您应该使用replaceAll()
代替replace()
。
然后,您应该将此String存储到可以在修改为Word文件后序列化的对象中。
此外,我认为处理结束标签(如果有的话)也很好......
答案 3 :(得分:0)
字符串(行)是不可变的,因此replace("<tag>", "<newTag>")
不会修改您的line
它会创建一个新的修改过的。{/ p>
你的代码应该做这样的事情:
for (Object object : content) {
line = object.toString();
if (line.contains("<tag>")) {
line= line.replaceAll("<tag>", "<newTag>");
}
writeLineToNewFile(line);
}
或更短:
for (Object object : content) {
writeLineToNewFile(object.toString().replace("<tag>", "<newTag>");
}