Java 替换word文件中的标记

Java 替换word文件中的标记,java,docx4j,Java,Docx4j,我在word文件中有一些标签,看起来像 现在,我使用docx4j获取Word文件的内容,并循环遍历每一行并搜索该标记。当我找到一个时,我用一个字符串替换它。但是我试过的这个代码不起作用,现在我真的不知道如何才能实现它 以下是我已经尝试过的代码: WordprocessingMLPackage wpml = WordprocessingMLPackage.load(new File(path)); MainDocumentPart mdp = wpml.getMainDocumentPart()

我在word文件中有一些标签,看起来像

现在,我使用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>");
    }
}
WordprocessingMLPackage wpml=WordprocessingMLPackage.load(新文件(路径));
MainDocumentPart mdp=wpml.getMainDocumentPart();
List content=mdp.getContent();
弦线;
用于(对象:内容){
line=object.toString();
如果(第行包含(“”)){
行。替换(“,”);
}
}

有什么建议或解决办法吗?

您的问题之一是修改了
字符串行,这对任何事情都没有影响<代码>行。替换(“,”)忽略此操作的结果。你肯定想用它做点什么,对吗

此外,如果循环中的
对象
不是
字符串
的实例,则
对象
指向不同的对象

您需要修改内容,但不需要修改操作方式。请阅读

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


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

首先,您应该使用
replaceAll()
而不是
replace()

然后,您应该将该字符串存储到一个对象中,在修改Word文件后,您可以重新序列化该对象

此外,我认为处理结束标记(如果有)也很好。

字符串(行)是不可变的,因此
replace(“,”)
不会修改您的
行,它会创建一个新的修改行

您的代码应该执行以下操作:

for (Object object : content) {
    line = object.toString();
    if (line.contains("<tag>")) {
       line= line.replaceAll("<tag>", "<newTag>");
    }
    writeLineToNewFile(line);
}
for(对象:内容){
line=object.toString();
如果(第行包含(“”)){
line=line.replaceAll(“,”);
}
writeLineToNewFile(行);
}
或更短:

for (Object object : content) {
      writeLineToNewFile(object.toString().replace("<tag>", "<newTag>");
}
for(对象:内容){
writeLineToNewFile(object.toString().replace(“,”);
}

列表中的内容将是org.docx4j.wml.p(段落)、Tbl(表格)或其他块级内容

段落包含运行,而运行又包含实际文本

有关执行所需操作的建议方法,请参阅VariableReplace示例

更好的是,考虑内容控制数据绑定。


否则,如果您想使用自己的方法,请参阅《入门指南》,了解如何遍历或使用JAXB级别的XPath。

因此我必须直接操作对象?我该如何操作?或者我应该将行写回对象中吗?是的,您需要操作内容,但不是操作方式。请参阅此处,例如:So I should创建一个新对象并将每个字符串附加到此对象…?感谢
replaceAll
的提示,我不熟悉文字处理软件包,但我想有一种方法可以序列化/整理一些内容。如果是,则构建一个新对象,您可以在其中移交并写入数据。然后将其与mar一起存储shalling方法。根据您是要写入
字符串
s还是原始字节,在
FileWriter
FileOutputStream
处进行锁定。