【发布时间】:2011-10-31 09:20:06
【问题描述】:
我的目录包含带有不同扩展名的 xml 文件的子目录。
更新部分开始
目标目录:/some/path
目标文件掩码:*.load
我们用来在/some/path 下查找*.load 文件的基本过滤器集:
<fileset dir="/some/path">
<include name="**/*.load" />
</fileset>
/some/path 下可以有多个子目录,也可以有多个*.load 文件。
但我们需要根据示例中描述的 XML 内容和参数来增强过滤,下面的用例。
例子:
load_file1.load:
<load
id="0a0740d1fc1a33a28f1397b76cae48bc"
order="9"
enable="true"
name="Load name 1"
type="LoadType.custom">
<parent />
<default-property name="Property2"
type="java.lang.Integer"
value="0" />
<default-property name="Property1"
type="java.lang.Boolean"
value="false" />
</load>
load_file2.load:
<load
id="ec9ca08d11ca34b42e13c5f21578d82c"
name="Load name 2"
order="0"
enable="true"
type="LoadType.base">
<parent />
<default-property name="Load name 1"
type="java.lang.String"
value="test3" />
<default-property name="Property2"
type="java.lang.Integer"
value="0" />
<!-- here could be any number of other sub-properties -->
<date-range end-date="1/31/1900"
start-date="1/31/1900" />
</load>
输入数据:
Ant 参数:Load_name = "Load name 1" - 用于查找对应文件
Ant 参数:Load_param_name_replace = "enable"
蚂蚁参数:Load_param_value_replace = "false"
注意!我们总是根据文件中//load/@name 属性(硬编码)的值来搜索文件:
<load
id="ec9ca08d11ca34b42e13c5f21578d82c"
name="Load name 2"
order="0"
enable="true"
type="LoadType.base">
问题(基于上述文件示例):
我们应该找到文件,其中
//load/@name = $Load_nameANT param ("Load name 1")我们应该将在
$Load_param_name_replaceANT param ("enable") 值中声明的找到的文件(可能是多个)XML 属性更改为 ANT 参数$Load_param_value_replace("假")
预期结果:
- 找到文件:load_file1.load
注意!请注意在load_file2.load中我们有<default-property name="Load name 1" ...匹配组合name="Load name 1",但是我们需要区分这种无效的情况和有效的情况文件 load_file1.load 中的一个。
- 在找到的文件中 load_file1.load 在
$Load_param_name_replace("enable") ANT 参数中定义的//load节点下的 XML 属性应更改为新的ANT 参数中定义的值$Load_param_value_replace("false")
因此,在 ANT 任务之后,文件 load_file1.load 应如下所示:
<load
id="0a0740d1fc1a33a28f1397b76cae48bc"
order="9"
enable="false"
name="Load name 1"
type="LoadType.custom">
<parent />
<default-property name="Property2"
type="java.lang.Integer"
value="0" />
<default-property name="Property1"
type="java.lang.Boolean"
value="false" />
</load>
更新部分结束
如您所见,xml 文件的内容分布在多行中 - 这对我来说是个棘手的部分。
我们尝试了 ANT fileset 目标和 containsregexp 过滤器,其中使用 name="load_name1" 搜索 多行正则表达式,但没有成功。我们使用了multiline=true 和singleline=true - 也没有用。
之后我们尝试了 XMLtask - 但是没有足够的示例说明如何根据一些 fileset 替换多个 .XML 文件中的 xml 属性。
所以如果你能提供几个例子 - 那就太好了!
【问题讨论】: