Ant:使用"过滤"复制xml文件时如何使用xml-escape属性值

use*_*465 6 xml ant

这个问题最近出现了.我一直在使用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&amp;wesson</password>
    ...
  </local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)

额外

我需要担心整个'角色扮演',即小于,大于等等,以及&符号.

提前致谢

Reb*_*bse 0

 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)


JDBC_PASSWORD=smith&amp;amp;wesson
Run Code Online (Sandbox Code Playgroud)

将导致:

 <local-tx-datasource>
  <password>smith&amp;amp;wesson</password>
 </local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)

将被解析为:

 <local-tx-datasource>
  <password>smith&amp;wesson</password>
 </local-tx-datasource>
Run Code Online (Sandbox Code Playgroud)

相似的 :

less-than : &lt;

greater-than : &gt;