这个问题最近出现了。我已经使用蚂蚁很久了,我知道我可以“破解”这个问题,但我想问:蚂蚁是否为这个用例提供了一个优雅的解决方案?
问题
当我使用ant复制xml文件并使用“filtering”属性“填充值”时,我如何才能使它自动转义&符号(以及其他xml“特殊字符”)?
上下文
我们让安装人员/实现人员在应用程序的根目录下编辑一个“build.properties”文件,而不是让他们手动编辑各种应用程序服务器特定的配置文件。Ant将文件的预配置“源”版本复制到“目标”目录,同时填充属性文件中的值
1) 构建。属性具有此值:
JDBC_PASSWORD=smith&wesson
2)“源”配置文件有这个元素:
<local-tx-datasource>
...
<password>@JDBC_PASSWORD@</password>
...
</local-tx-datasource>
3)Ant从“source”配置目录复制xml文件,并使用“过滤”属性填充“JDBC_PASSWORD”(以及其他属性):
<copy todir="${appserver.home.dir}" filtering="yes">
<fileset dir="${appserver.conf.dir}">
<include name="**/*.xml"/>
</fileset>
</copy>
4) 因为属性有一个与符号,所以生成的“target”xml文件无效。(“
<local-tx-datasource>
...
<password>smith&wesson</password>
...
</local-tx-datasource>
预期结果
我想要的不是4,而是这个:
<local-tx-datasource>
...
<password>smith&wesson</password>
...
</local-tx-datasource>
附加的
我需要担心整个“角色组合”,即小于、大于等。,以及&符号。
预先感谢
如果您不替换属性值,您可以始终使用CDATA部分代替。CDATA中的&符号、小于等不需要进行实体转义。
<local-tx-datasource>
...
<password><![CDATA[@JDBC_PASSWORD@]]></password>
...
</local-tx-datasource>
您可以使用Ant-Contrib任务URLEncode(是的,标题上写着Foreach,但这只是为了分散注意力。).
您可以使用它来确保您传递的任何值
您必须定义一个
JDBC_PASSWORD=smith&wesson
将导致:
<local-tx-datasource>
<password>smith&wesson</password>
</local-tx-datasource>
将被解析为:
<local-tx-datasource>
<password>smith&wesson</password>
</local-tx-datasource>
JDBC_PASSWORD=smith&amp;wesson
将导致:
<local-tx-datasource>
<password>smith&amp;wesson</password>
</local-tx-datasource>
将被解析为:
<local-tx-datasource>
<password>smith&wesson</password>
</local-tx-datasource>
类似:
小于 :
大于:
问题内容: 我需要取消转义包含转义的XML标签的xml字符串: 我确实找到了一些可以执行此任务的库,但是我宁愿使用可以执行此任务的单一方法。 有人可以帮忙吗? 干杯,Bas Hendriks 问题答案: (commons-lang,下载)
我知道我们无法访问web中的属性。但是有没有解决方法来实现这一点。我只需要访问env在web中的价值。xml文件。 如有任何建议,我们将不胜感激。
使用xsltproc(XSLT 1.0)我试图逃脱("- XSL: 原始XML: 输出: 这会破坏结果JSON 我尝试过使用str:replace,但没有成功。禁用输出转义=“是”也没有成功。 有什么暗示吗? -- xsltproc-V 使用libxml 20706、libxslt 10126和libexslt 815
我有以下pom.xml: 注意,上的元素被注释掉了 在中还有以下内容 因此,我希望Maven做的只是用替换,除非开发配置文件被激活,否则我希望Maven用替换 当我运行时,它将值设置为。很好,资源筛选工作正常。 但是,当我运行时,它将值设置为 如果取消对配置文件上的元素的注释并运行,则会将设置为 我甚至运行了让它输出活动的配置文件名称,并且在上面的两种情况下,它都表示开发配置文件是活动的,但是如果
我有一个目录,里面有几个子目录。里面有文件。在那些是一个副本,存在于多个目录中。子目录和文件名在执行时显然是未知的。 我试图使用将的内容复制到中,这样我得到的文件结构 到目前为止,我有以下几点 这很好,达到了我想要的效果,但是,在中有重复文件是一个错误。如果检测到中有重复的文件名,我希望构建失败 我试图找到一种方法来制作<代码> 也许让每个复制的文件都是只读的,这样作为的结果的后续覆盖无法覆盖并产