在我的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="<elem>(.*)elem>"
replace="<elem>${replace_only_second_match}elem>"
byline="true"
/>
上述任务的问题是所有标签都将被替换。但是,我只希望修改第二个元素,而不是第一个或第三个匹配。 (对于普通的正则表达式,这样的事情很容易。)
不知道如何使用Ant的正则表达式来完成它。这是我需要帮助/建议如何最好地解决这个问题。
答案 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 manual和tutorial
一些XPath要点here。