我想使用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拉出关于组件的属性?
答案 0 :(得分:2)
听起来我需要使用XPath来唯一标识每个组件。首先,there is a related SO question。我想你不知道search for Xpath, because that's what will help you in this situation。不过,我将在这个答案中总结一些选项。
看起来是最好的选择。将XML值拉入属性:
<xmltask source="map.xml">
<!-- copies to a property 'user' -->
<copy path="/map/entry[@key='database.user']/@value" attrValue="true" property="user"/>
</xmltask>
它看起来似乎可以将XML中的值从系统属性中提取出来,但文档非常缺乏:
<target name="find-hrefs">
<xpath document="foo.xhtml" xpath="/html/body/a/@href" outputproperty="hrefs"/>
</target>
在相关的SO问题中提到了这一点。它在答案中使用Javascript从XML中提取数据并将其存储在系统属性中。现在,也许您可以使用Groovy或Scala脚本引擎支持更简洁的语法。
使用XSLT to perform manipulation on XML。这无助于您从我认为的XML中提取值,但您可能需要更改某些值或节点。