在Ant中替换尖括号

  • 本站文章除注明转载外,均为本站原创或者翻译。
  • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
  • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
  • 本博客采用 WPCMD 维护;
  • 本文标题:在Ant中替换尖括号
  • 本文链接:http://zengrong.net/post/1717.htm

在Ant中替换尖括号

我使用 ReplaceRegexp 任务写了一段脚本替换XML的值:

<replaceregexp file="app.xml"
            match="<filename>"
            replace="name"
            encoding="UTF-8"/>

由于XML规范不允许在属性值中出现尖括号,Ant会报错:

d:\works\build\build.xml:70: 与元素类型 “null” 相关联的 “match” 属性值不能包含 ‘<‘ 字符。

把左右尖括号用他们的十六进制代码代替就可以解决这个问题:

<replaceregexp file="app.xml"
            match="\x3Cfilename\x3E"
            replace="name"
            encoding="UTF-8"/>

如果希望在替换的内容中也使用尖括号,需要一点点小技巧:

<replaceregexp file="app.xml"
            match="(\x3C)filename(\x3E)"
            replace="\1name\2"
            encoding="UTF-8"/>

当然,还有更简单的办法,就是使用 Replacereplacetoken

<replace file="app.xml" encoding="UTF-8">
    <replacetoken><![CDATA[<filename>]]></replacetoken>
    <replacevalue><![CDATA[<name>]]></replacevalue>
</replace>