你可以使用Ant来构建/修改XML文件吗?

6

我对Ant还比较新,一直在研究任务。我想生成一个XML文件。我需要调用外部进程吗?还是Ant有某种方法可以做到这一点?它可能只是将字符串发送到文本文件并将其保存为.xml。这可行吗?


1
你想做的事情,Replace任务不够吗? - tonio
谢谢,这些答案都非常有用。 - sarcasteak
4个回答

10

当你需要在ant工作流中处理任何类型的XML时,强烈推荐使用xmltask。它提供非常详细的文档和良好的支持。除此之外,你还需要一些XPATH知识。这里有 另一篇有用的文章


6
正确的答案取决于你实际想要做什么。你可以使用echo任务和参数替换创建一个小的xml文档,但这很快就难以维护。如果你的目标是生成一个大部分为样板内容且有几个值替换的XML文档,则应该创建一个模板文档,然后使用Copy with filtering任务。如果您需要根据来自Ant(或从其他地方收集的)的数据修改文档的结构,则使用xslt任务将更合适。 XSLT的问题在于它并不总是易于使用(XSLT使用函数式编程,而不是过程式编程)。你可能会发现正确的答案是编写自己的Ant任务,以完全符合你的要求。
如果您能更好地描述您想要实现的目标,我相信会有人很乐意提供更精确的答案。

谢谢,我选择了复制过滤的方式,效果非常好! - sarcasteak
只是一个“边缘情况”的问题 - “复制过滤器”任务是否正确处理包含特殊XML字符(<,&等)的值? - monojohnny
复制过滤器很“愚笨”,它只是复制字节,并进行值替换。诀窍在于,你需要在XML构建文件中定义这些值。如果你能正确定义这些值,复制过滤器就能很好地进行替换。 - Craig Trader

5
你可以使用 Replace 任务来替换模板中的指定字符串,并将其保存为xml。以下是ant文档中的一个简单示例:
<replace file="${src}/index.html" token="@@@" value="wombat"/>

我曾经在Java项目中使用它来将常量@version@替换为实际的构建标识符。
如果您想进行更复杂的处理,您应该查看XSLT任务。例如,要生成带有输出中date替换的文档,您可以使用以下内容:
<xslt basedir="doc" destdir="build/doc"
      extension=".html" style="style/apache.xsl">
  <param name="date" expression="07-01-2000"/>
</xslt>

1

你可以这样做,但在我看来,这更像是你想要预先编写脚本的事情,或者是你可以从Ant中调用的东西。

任务将会是:

<echo file="my.xml"><!--put escaped xml here--></echo>

当然,这会很繁琐,因为所有内容都必须进行转义,但你可以做到。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接