如何在Java中的xml模板中替换第n次出现?

问题描述

在这里,我正在使用 Java 进行自动化,宁静而放心。 所以我想用一个空白字符串替换第二个 <p> & </p> 标签

附上模板

<Request>    
    <P>
        <n>name1</n>
        <v>${value1}</v>
    </P>
    <P>
        <n>name2</n>
        <v>${value2}</v>
    </P> 
   <P>
        <n>name3</n>
        <v>value3</v>
    </P> 
</Request>

我使用以下代码替换第二个 <p></p> 标签。但它被替换了所有 <p> &</p> 标签(第一个和最后一个 <p> & </p> 标签也是)

String request = exampleTemplate.replace("${value1}","XYZ")
                .replace("<P>","")
                .replace("<v>${value2}</v>","1234")
                .replace("</P>","")
                .replace("${value3}","AAA");

如何只替换第二个 <p></p> 标签

解决方法

您可以同时匹配第一个和第二个 <p> 元素。

String res = str.replace("${value1}","XYZ")
                .replace("<v>${value2}</v>","1234")
                .replace("${value3}","AAA")
                .replaceFirst("(?s)(<P>.*?</P>\\s*)<P>(.*?)</P>","$1$2");

Demo