【问题标题】:How to replace nth occurrence in the xml template in Java?java - 如何替换Java中xml模板中的第n次出现?
【发布时间】:2021-06-20 04:53:31
【问题描述】:

在这里,我正在使用 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>

我正在使用下面的代码替换第二个&lt;p&gt;&lt;/p&gt; 标签。但它被替换了所有&lt;p&gt; &&lt;/p&gt; 标签(第一个和最后一个&lt;p&gt; & &lt;/p&gt; 标签也)

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

如何只替换第二个 &lt;p&gt;&lt;/p&gt; 标签?

【问题讨论】:

    标签: java regex rest-assured serenity-bdd


    【解决方案1】:

    您可以同时匹配第一个和第二个&lt;p&gt; 元素。

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

    Demo

    【讨论】:

    • 感谢正则表达式。有什么办法可以替换最后的 '

      ' & '

      ' 标签?
    • 这是一种非常聪明的方法,可以在此解决方案中使用正则表达式。 @kithmi - 你可以从Learning Regular Expressions 了解更多关于正则表达式的信息。但是,我建议您尝试使用 XML 解析器解决这些类型的问题。
    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2018-09-08
    • 1970-01-01
    • 2021-04-07
    相关资源
    最近更新 更多