Ant 宏使用元素的内容作为属性的值

发布于 2025-01-03 10:48:39 字数 1710 浏览 0 评论 0原文

我想使用名为“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>

I want to use the content of the element named "soql" as an attribute in a replace filter. What I wanted to achieve is to replace a value in a file with the contents of an element. In this case I am inclined to not use an attribute as the value should be enclosed within CDATA block

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╭⌒浅淡时光〆 2025-01-10 10:48:39

如果您有最新版本的 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>

If you have a reasonably up-to-date version of Ant (>1.7) you may be able to use a string resource to do this. Here's a simple example:

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

Result:

[echo] There be <dragons>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文