0

我想使用 ant 更新下面 xml 文件中的 Regist 和 Manage 组件中的数值

XML:-

<?xml version="1.0" encoding="UTF-8" ?>  
<Application>  
<component>  
<name>Regist</name>  
<filename>v1.5.0.4-Regist.zip</filename>  
<version>v1.5.0.4</version>  
<size>1001518</size>  
</component>  
<component>
<name>Manage</name>  
<filename>v1.5.1.1-manage.jar</filename>  
<version>v1.5.1.1</version>  
<size>3795024</size>  
</component>  
</Application>  

Ant 能够遍历脚本,但由于上述结构,无法区分组件。它将上述 xml 组件标识为以下属性,

Application.component.filename=v1.5.0.4-Regist.zip,v1.5.1.1-manage.jar   
Application.component.name=Regist,Manage   
Application.component.size=1001518,3795024   
Application.component.version=v1.5.0.4,v1.5.1.1   

我们分别运行组件注册和管理,新值将更新到此 XML 组件

有没有办法通过 ant 拉取组件的属性?

4

1 回答 1

2

在我看来,您需要使用 XPath 来唯一标识每个组件。首先,有一个相关的 SO question。我猜你不知道要搜索 Xpath,因为这在这种情况下会对你有所帮助。不过,我将在此答案中总结一些选项。

xml任务

看起来是最好的选择。要将 XML 值拉入属性:

<xmltask source="map.xml">
  <!-- copies to a property 'user' -->
  <copy path="/map/entry[@key='database.user']/@value" attrValue="true" property="user"/>
</xmltask>

ant-xpath 任务

看起来它也可以将 XML 中的值提取到系统属性中,但是文档非常缺乏:

<target name="find-hrefs">
  <xpath document="foo.xhtml" xpath="/html/body/a/@href" outputproperty="hrefs"/> 
</target>

通过 Ant 的脚本引擎

这在相关的 SO 问题中有所提及。它在答案中使用 Javascript 从 XML 中提取数据并将其存储在系统属性中。不过,如今,也许您可​​以使用 Groovy 或 Scala 脚本引擎支持来获得更简洁的语法。

核心风格蚂蚁任务

使用XSLT 对 XML 执行操作。我认为这不会帮助您从 XML 中提取值,但您可能需要更改一些值或节点。

于 2013-10-31T22:36:07.153 回答