Макрос Ant использует содержимое элемента в качестве значения атрибута - PullRequest
1 голос
/ 07 февраля 2012

Я хочу использовать содержимое элемента с именем "soql" в качестве атрибута в фильтре замены. Чего я хотел добиться - это заменить значение в файле содержимым элемента. В этом случае я склонен не использовать атрибут, так как значение должно быть заключено в блок CDATA

 <macrodef name="exportdata">
            <attribute name="file"/>
            <attribute name="object"/>
            <element name="soql"/>
            <sequential>
                <echo message="Exporting @{object}"/>
                <mkdir dir="data/exports"/>

                <copy file="data/config/template-process-conf.xml" tofile="data/config/process-conf.xml" overwrite="true" failonerror="true"/>

                            <replace file="data/config/process-conf.xml">
                            <replacefilter token="_endpoint_" value="${sf.serverurl}"/>

                    <replacefilter token="_username_" value="${sf.username}"/>
                    <replacefilter token="_password_" value="${encryptedpassword}"/>
                            <replacefilter token="_object_" value="@{object}"/>
                            <replacefilter token="_soql_" value="@{soql}"/>
                            <replacefilter token="_file_" value="data/exports/@{file}.csv"/>
                    <replacefilter token="_keyfile_" value="data/config/key.txt"/>
                        </replace>

                <java classname="com.salesforce.dataloader.process.ProcessRunner" classpath="lib/DataLoader.jar" failonerror="true">
                    <sysproperty key="salesforce.config.dir" value="data/config"/>
                    <arg line="process.name=export@{object}"/>
                </java>
            </sequential>
        </macrodef>

1 Ответ

1 голос
/ 07 февраля 2012

Если у вас достаточно свежая версия Ant (> 1.7), вы можете использовать для этого ресурс string Вот простой пример:

<macrodef name="element2string">
  <element name="elem"/>
  <sequential>
      <string id="elem.as.string"><elem/></string>
      <echo message="${toString:elem.as.string}"/>
  </sequential>
</macrodef>

<element2string>
    <elem><![CDATA[There be <dragons>]]></elem>
</element2string>

Результат:

[echo] There be <dragons>
...