Ant,replaceregexp,匹配并替换匹配列表中的特定元素

时间:2014-02-24 04:46:36

标签: regex ant match

在我的ant构建文件中,我有一个需要替换XML的特定元素的任务。

以下是我要修改的目标XML:

<foo>
 <sub>
  <elem>name1</elem>
 </sub>
 <sub>
  <elem>name2</elem>
 </sub>
 <sub>
  <elem>name3</elem>
 </sub>
</foo>

Ant构建任务:

<replaceregexp file="myfoo.xml"
      match="&lt;elem&gt;(.*)elem&gt;"
      replace="&lt;elem&gt;${replace_only_second_match}elem&gt;"
      byline="true"
/>

上述任务的问题是所有标签都将被替换。但是,我只希望修改第二个元素,而不是第一个或第三个匹配。 (对于普通的正则表达式,这样的事情很容易。)

不知道如何使用Ant的正则表达式来完成它。这是我需要帮助/建议如何最好地解决这个问题。

1 个答案:

答案 0 :(得分:1)

您应该将xmltask用于xml相关任务,因为您的问题会像这样使用它:

在原地修改文件

<xmltask source="whatever.xml" dest="whatever.xml">
  <replace path="//sub[2]/elem/text()" withText="newname2"/>
</xmltask>

创建新文件

<xmltask source="whatever.xml" dest="newfile.xml">
  <replace path="//sub[2]/elem/text()" withText="newname2"/>
</xmltask>

替换部分还提供withXml / withFile / withBuffer 有关详细信息,请参阅xmltask manualtutorial 一些XPath要点here