这个问题最近出现了.我一直在使用ant for eons并且知道我可以"解决"这个问题,但是想问一下:蚂蚁是否为这个用例提供了一个优雅的解决方案?
问题
当我使用ant复制xml文件并使用"过滤"属性"填充值"时,如何让它自动转换为&符号(和其他xml'特殊字符')?
上下文
我们让他们在应用程序的根目录中编辑"build.properties"文件,而不是让安装程序/实现者手动编辑所有各种特定于应用程序服务器的配置文件.Ant将文件的预配置"源"版本复制到"目标"目录,同时从属性文件中填充值
1)Build.properties具有以下值:
JDBC_PASSWORD=smith&wesson
Run Code Online (Sandbox Code Playgroud)
2)"Source"配置文件具有以下元素:
<local-tx-datasource>
...
<password>@JDBC_PASSWORD@</password>
...
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
3)Ant从'source'配置目录复制xml文件,并使用'filtering'属性填充'JDBC_PASSWORD'(以及其他属性):
<copy todir="${appserver.home.dir}" filtering="yes">
<fileset dir="${appserver.conf.dir}">
<include name="**/*.xml"/>
</fileset>
</copy>
Run Code Online (Sandbox Code Playgroud)
4)因为属性有一个&符号,所以"target"xml文件无效.('&'应该是'&')
<local-tx-datasource>
...
<password>smith&wesson</password>
...
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
期望的结果
而不是4,我想这样:
<local-tx-datasource>
...
<password>smith&wesson</password>
...
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
额外
我需要担心整个'角色扮演',即小于,大于等等,以及&符号.
提前致谢
JDBC_PASSWORD=smith&wesson
Run Code Online (Sandbox Code Playgroud)
将导致:
<local-tx-datasource>
<password>smith&wesson</password>
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
将被解析为:
<local-tx-datasource>
<password>smith&wesson</password>
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
JDBC_PASSWORD=smith&amp;wesson
Run Code Online (Sandbox Code Playgroud)
将导致:
<local-tx-datasource>
<password>smith&amp;wesson</password>
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
将被解析为:
<local-tx-datasource>
<password>smith&wesson</password>
</local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)
相似的 :
less-than : <
greater-than : >