替换word文件中的标签

时间:2013-07-05 10:18:36

标签: java docx4j

我在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>");
    }
}

我能如何实现它的任何提示或解决方案?

4 个答案:

答案 0 :(得分:1)

您的一个问题是修改String line,这对任何事都没有影响。忽略此操作的line.replace("<tag>", "<newTag>");结果。你肯定想做那个,对吧?

此外,如果您的循环中的object不是String,则lineobject指向不同的对象。

您需要修改内容,而不是修改内容的方式。请阅读getting started

源代码download section

中还有很多示例(示例代码)

如果您在阅读入门后遇到任何具体问题,我们将很乐意为您提供帮助。

答案 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>");
}
相关问题