Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用合并字段Docx4j替换文本_Java_Xpath_Jaxb_Ms Word_Docx4j - Fatal编程技术网

Java 用合并字段Docx4j替换文本

Java 用合并字段Docx4j替换文本,java,xpath,jaxb,ms-word,docx4j,Java,Xpath,Jaxb,Ms Word,Docx4j,我正在尝试使用Docx4j用占位符(合并字段)替换文本。假设我提交了一个带有文本“亲爱的[名字],…”的表单。我需要使用表单中提交的文本创建word文档,同时用合并字段替换“[firstName]” 我目前正在使用正则表达式查找“[”和“]”之间的文本,并使用docx4j为其创建一个合并字段: String regex = "\\[(.*?)\\]"; Pattern p = Pattern.compile(regex); Matcher m = p.matcher(ea

我正在尝试使用Docx4j用占位符(合并字段)替换文本。假设我提交了一个带有文本“亲爱的[名字],…”的表单。我需要使用表单中提交的文本创建word文档,同时用合并字段替换“[firstName]”

我目前正在使用正则表达式查找“[”和“]”之间的文本,并使用docx4j为其创建一个合并字段:

    String regex = "\\[(.*?)\\]";
    Pattern p = Pattern.compile(regex);
    Matcher m = p.matcher(eachSplit);

    while(m.find()) {

        ctSimple.setInstr(" MergeField "+m.group(1)+" \\* MERGEFORMAT ");

        RPr RPr = factory.createRPr();
        RPr.setNoProof(new BooleanDefaultTrue());

        Text t = factory.createText();
        t.setValue("<"+m.group(1)+">");

        R run = factory.createR();
        run.getContent().add(RPr);
        run.getContent().add(t);

        ctSimple.getContent().add(run);

    }
    JAXBElement<CTSimpleField> fldSimple = factory.createPFldSimple(ctSimple);  
但我不知道如何将合并字段添加到与找到的文本相同的位置。我发现可能我可以使用一些xpath来实现这一点,如中所示,但我没有完全理解这个概念

我知道,如果为此生成的xml如下所示:

<w:p>
  <w:r>
    <w:t>Dear [lastName],</w:t>
     </w:r>
  </w:p>

亲爱的[姓氏],
我需要将此更改为:

<w:p>
  <w:r>
    <w:t>Dear</w:t>
  </w:r>
  <w:r>
      <w:t xml:space="preserve"> </w:t>
  </w:r>
  <w:fldSimple w:instr=" MERGEFIELD  lastName  \* MERGEFORMAT ">
    <w:r>
      <w:rPr>
          <w:noProof/>
       </w:rPr>
     <w:t>«lastName»</w:t>
    </w:r>
    </w:fldSimple>
   <w:r>
   <w:t>,</w:t>
   </w:r>
</w:p>

亲爱的
«姓氏»
,
我怎样才能做到这一点

<w:p>
  <w:r>
    <w:t>Dear</w:t>
  </w:r>
  <w:r>
      <w:t xml:space="preserve"> </w:t>
  </w:r>
  <w:fldSimple w:instr=" MERGEFIELD  lastName  \* MERGEFORMAT ">
    <w:r>
      <w:rPr>
          <w:noProof/>
       </w:rPr>
     <w:t>«lastName»</w:t>
    </w:r>
    </w:fldSimple>
   <w:r>
   <w:t>,</w:t>
   </w:r>
</w:p>