1

いくつかの XML ファイルをループし、その中の環境固有の値を置き換えて、新しい XML ファイルのセットを作成する必要がありました。環境固有の値は、プロパティ ファイルから取得されます。以下のように、ディレクトリをループしてすべてのファイルを読み取り、xmltask を使用して特定の値を置き換えることができます。

    <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>

しかし、プロパティ ファイルを読み込んで、そこからパス/値を取得したいと考えています。この場合のさまざまなオプションとしてプロパティセレクター、プロパティ、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> ${x.@{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> 

皆さんが光を当てることができれば、本当に役に立ちます。

ありがとう、ベンカット

4

1 に答える 1

1

これはうまくいくでしょうか?

「x」と混同してしまったようです。プレフィックス。

<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 = ${x.@{sequence}.xpath} </echo>
                <echo> @{sequence}.value = ${x.@{sequence}.value} </echo>
            </sequential>               
          </for>          
    </target> 
</project>
于 2014-01-22T15:00:40.193 に答える