2014-02-24 52 views
0

在我的ant構建文件中,我有一個任務需要替換XML的特定元素。Ant,replaceregexp,匹配並替換匹配列表中的特定元素

這裏是我想修改目標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的正則表達式來做到這一點。這是我需要幫助/建議如何最好地解決這個問題。

+0

只需訪問http://www.oopsconsultancy.com/software/xmltask/並搜索'withXml' – Rebse

回答

1

您應該使用xmltask爲xmlrelated任務,您的問題用它像:

修改文件就地

<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> 

的replacesection還提供withXml/withFile/withBuffer
有關詳細信息,請參閱xmltask manualtutorial
一些XPath必需品here

+0

謝謝。我曾看過這個,但直到你指出的時候才朝那個方向前進。另外,我似乎無法在手冊中找到對「withXml」或「withBuffer」的引用。 –

+0

只需訪問http://www.oopsconsultancy.com/software/xmltask/並搜索'withXml' – Rebse