我有一個帶有不同擴展名的XML文件的子目錄。ANT:根據XML文件內容替換一組XML文件中的參數
開始更新部分的
目標目錄:/some/path
目標文件面膜:*.load
基本filterset我們用它來尋找/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>
輸入數據:
螞蟻PARAM:Load_name = "Load name 1"
- 用於查找相應的文件
螞蟻PARAM:Load_param_name_replace = "enable"
螞蟻PARAM:Load_param_value_replace = "false"
NB!我們始終立足於在他們裏面//load/@name
屬性(硬編碼)的值,搜索文件:
<load
id="ec9ca08d11ca34b42e13c5f21578d82c"
name="Load name 2"
order="0"
enable="true"
type="LoadType.base">
問題(基於示例文件的上面):
我們應該找到文件其中
//load/@name = $Load_name
ANT參數(「加載名稱1」)我們應該更改找到的文件(可能是多個LE)XML屬性在
$Load_param_name_replace
ANT參數( 「使 」)值聲明爲ANT PARAM$Load_param_value_replace
(「 假」)
預期結果的價值:
- 文件( s)找到:load_file1.load
注意!請注意,在load_file2.load我們有<default-property name="Load name 1" ...
匹配組合name="Load name 1"
,但我們需要區分這個無效的案例和有效的文件load_file1.load。
- 在找到的文件(S)load_file1.load XML屬性在
$Load_param_name_replace
定義(」 啓用 「)下//load
節點ANT PARAM應改爲在ANT PARAM定義的新值$Load_param_value_replace
(」 假 「)
所以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
- 也沒有工作。
之後,我們嘗試XML任務 - 但沒有足夠的例子來說明如何取代基於fileset
的多個.XML文件中的xml屬性。
所以,如果你可以提供幾個例子 - 它會很棒!
thx。還有一點 - 我們不能驗證XML文件中是否存在字符串「name ='value'」,因爲它的結構可能更加棘手,我們可能還有其他節點,而不僅僅是根節點,它的鍵值如「name = '值'」。所以我們想要確定的是,我們檢查該參數是否爲根節點。 –
zmische
我更新了一個問題的例子。這就是爲什麼我們首先在內嘗試了正則表達式。 –
zmische
你更新更棘手的例子有點令人困惑:[1。] \\ load \ @name不是有效的xpath表達式,有效表達式// load/@ name會產生load_name2 [2.]你搜索name =「whatever 「只作爲來自加載標籤的屬性,而不是來自屬性標籤的屬性,對吧? – Rebse