2014-01-21 3 views
1

У меня возникло требование перебрать некоторые XML-файлы, заменить в нем значения среды и создать новый набор XML-файлов. Конкретные значения среды должны быть взяты из файла свойств. Я могу пройти через каталог, чтобы прочитать все файлы и заменить определенное значение с помощью xmltask, как показано ниже.Ant Script Loop через файл свойств и динамически меняет значения

<target name="updateConfig" description="update the configuration" depends="init">  
<xmltask todir="${ConfigDestDirectory}" report="false" failwithoutmatch="true"> 
     <fileset dir="${ConfigSourceDirectory}"> 
      <include name="*.xml"/>  
     </fileset>    
     <replace path="/:application/:NVPairs/:NameValuePair[:name='Connections/HTTP/HostName']/:value/text()" withXml="localhost"/>   
     </xmltask> 
    <echo>Replaced Successfully</echo> 
    </target> 

Но я хотел бы прочитать файл свойств и получить от него путь/значение. Я попытался использовать свойство selector, property, var как различные параметры для этого случая и получить путь, но не значение. Ниже приведен фрагмент файла свойств и целевого объекта, который я использую.

#DEV.properties 
HostName.xpath=/:application/:NVPairs/:NameValuePair[:name='Connections/HTTP/HostName']/:value/text() 
HostName.value=localhost 

<project name="TestBuild" default="ReadPropertyFile" basedir="."> 
    <target name="init">   
      <property file="DEV.properties"/> 
      <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="${xmltaskPath}"/> 
      <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${antcontribPath}"/> 
      <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 
     </target> 

    <target name="ReadPropertyFile" description="update the configuration" depends="init">  
       <property file="DEV.properties" prefix="x"/>   
       <propertyselector property="propertyList" delimiter="," select="\0" match="([^\.]*)\.xpath" casesensitive="true" distinct="true"/>  
       <for list="${propertyList}" param="sequence">    
       <sequential> 
        <propertyregex property="destproperty" input="@{sequence}" regexp="([^\.]*)\." select="\1" />     
        <property name="tempname" value="${destproperty}.value" />  
        <var name="localprop" value="${tempname}"/> 
        <echo> @{sequence} </echo> 
        <echo> ${[email protected]{sequence}} </echo> 
        <echo>destproperty --> ${destproperty}</echo> 
        <echo>tempname --> ${tempname}</echo> 
        <echo> localprop --> ${localprop}</echo>  
        <echo>${x.${localprop}} </echo> <!--This is not working --> 
       </sequential>    
       </for>   
      </target> 

Было бы очень полезно, если вы, ребята, можете пролить свет.

Спасибо, Venkat

ответ

1

Будет ли это работать лучше?

Я думаю, что вы запутались в «х». префикс.

<project name="TestBuild" default="ReadPropertyFile" basedir="."> 
    <target name="init">   
     <property file="DEV.properties"/> 
     <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" classpath="${xmltaskPath}"/> 
     <taskdef resource="net/sf/antcontrib/antlib.xml" classpath="${antcontribPath}"/> 
     <taskdef resource="net/sf/antcontrib/antcontrib.properties"/> 
    </target> 

    <target name="ReadPropertyFile" description="update the configuration" depends="init">  
      <property file="DEV.properties" prefix="x"/>   
      <local name="propertyList"/> 
      <propertyselector property="propertyList" delimiter="," select="\1" match="x\.([^\.]*)\.xpath" casesensitive="true" distinct="true"/>  
      <for list="${propertyList}" param="sequence">    
      <sequential> 
       <echo> @{sequence} </echo> 
       <echo> @{sequence}.xpath = ${[email protected]{sequence}.xpath} </echo> 
       <echo> @{sequence}.value = ${[email protected]{sequence}.value} </echo> 
      </sequential>    
      </for>   
    </target> 
</project> 
+0

Я скорректировал сценарий ниже, чтобы использовать select = "\ 1" (выберите первое совпадение) вместо select = "\ 0" выберите всю строку). –

+0

Привет, Патрис, спасибо тонну. Его работа прекрасна. Вы правы, я запутался в префиксе x и не очень уверен в синтаксисе. Также местная собственность не работала, пока я не изменил версию муравья. Я продолжу это сейчас. – user3218526

+0

Отлично!