一般的文本搜索替换操作,使用Ant中的<replace>任务就够用了,但在现代Java框架中,用户更可能需要强大的XML操作能力来修改servlet描述符、Spring配置等,就需要用到xmlTask了。
首先,在%ANT_HOME%\lib下添加xmltask.jar,下面为ant工程的目录结构图以及address.xml、address.properties、build.xml内容。
<!-- address.xml --> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <a> <b> <address url="myURL">myaddress</address> </b> </a>
#address.properties address.url = localhost:8080 address.text = myaddressChange xml.location = ./source_folder
<?xml version="1.0" encoding="UTF-8"?> <project name="test" basedir="."> <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> <property file="address.properties"></property> <macrodef name="replaceXML"> <attribute name="replaceAttributeValue"/> <attribute name="replaceTextValue"/> <sequential> <xmltask source="${xml.location}/address.xml" dest="${xml.location}/address.xml"> <replace path="a/b/address/@url" withText="@{replaceAttributeValue}"/> <replace path="a/b/address/text()" withText="@{replaceTextValue}"/> </xmltask> </sequential> </macrodef> <replaceXML replaceAttributeValue="${address.url}" replaceTextValue="${address.text}" /> </project>
分析:
1. <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/>: 使用xmltask检索xml,需要在ant_home\lib中加入xmltask.jar.
2.<macrodef name="replaceXML">...:相当于JAVA中的方法,<attribute name="replaceAttributeValue"/>相当于方法中的形式参数。
3. @{replaceAttributeValue}: 代表<macrodef>下的属性名为replaceAttributeValue的<attribute/>, 即<attribute name="replaceAttributeValue"/>。
4. @url::代表address节点下的url属性,即<address url="xxx"></address>。@...在xpath中定义就是为选取属性,这里xmltask延用xpath。
5. test(): 代表address节点下的值,即<address>xxx</address>
------------------------------------------------------------------------------------------------------------------------------
xmltask使用xpath查询,而xpath查询仅限于没有命名空间的xml(即没有xmlns属性),一旦遇到有命名空间的xml,对于xpath查询就会没有结果。
如上案例: 如果address.xml变为:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <a xmlns="xmlNameSpace"> <b> <address url="localhost:8080">myaddress</address> </b> </a>
此时使用xpath查询a/b会返回null,即找不到节点。
解决方案: 将build.xml中a/b/address替换成/*[local-name()='a']/*[local-name()='b']/*[local-name()='address']
<?xml version="1.0" encoding="UTF-8"?> <project name="test" basedir="."> <taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask"/> <property file="address.properties"></property> <macrodef name="replaceXML"> <attribute name="replaceAttributeValue"/> <attribute name="replaceTextValue"/> <sequential> <xmltask source="${xml.location}/address.xml" dest="${xml.location}/address.xml"> <replace path="/*[local-name()='a']/*[local-name()='b']/*[local-name()='address']/@url" withText="@{replaceAttributeValue}"/> <replace path="/*[local-name()='a']/*[local-name()='b']/*[local-name()='address']/text()" withText="@{replaceTextValue}"/> </xmltask> </sequential> </macrodef> <replaceXML replaceAttributeValue="${address.url}" replaceTextValue="${address.text}" /> </project>
相关推荐
Python写的一个程序,可以生成java开发中ANT工具所需的build.xml文件。
该程序为Ant的扩展任务,在拷贝文本格式的文件的同时替换文件中的Ant表达式,类似于 ${property.name},属性值来自于Ant脚本加载的属性文件,如果没有属性文件中没有定义相关属性,那么保留原来的表达式;...
jmeter+ant 持续集成build.xml文件,直接使用ant命令执行jmeter脚本文件,得到图形测试报告
我的开发环境是Eclipse,ant.xml是放在项目下的ant(新建),也可以修改project的basedir.
演示 build.xml 是编写方法,适合 ant build 初学者,解压,进入 ant 目录, 运行命令 ant 既可
NULL 博文链接:https://kanpiaoxue.iteye.com/blog/1995837
开源ant的build.xml的一些属性配置,内含 几个例子。比较实用
对ant的概念和进行了讲解,并且和makefile进行了比较。讲述了一些常用的ant命令。
ant 批量替换包名,当需要使用脚本批量替换包名的时候可以搞定。
第一次做jmeter+ant自动化接口测试,需要build文件,开始直接copy博客中的内容,格式不对,调试好久不成功;后发现在jmeter/extras文件夹中有一个build文件,copy出来根据需要修改下,成功了,特上传自选供大家使用...
ant打包时,由于sdk版本较低,可能打包失败,需要覆盖sdk目录下的buil.xml文件
ant做的一个小例子,里面有build.xml的详细配置,导入myEclipse后可直接运行。
2、配置环境变量,将解压缩的路径(你的硬盘:\放的文件夹下\apache-ant-1.8.4\bin),配置在环境变量的path路径下,输入ant看效果。 3、部署本项目,运行构建看效果。 说明:这个是一个项目开发的辅助工具,比较...
java自动批处理编译工具ant.对于初学者来说build.xml文件很头疼。我们公司做ant培训。我特此写的一些资料。 供大家学习之用。文件是个.xml 文件.吧文件名中的中文去掉就能直接用。也可以用编辑工具直接打开了看。
Ant 替换某一文件中的字符串Ant 替换某一文件中的字符串
ANT_发布项目中_build.xml_文件的详细配置
Ant_build.xml配置实例,Ant的详细配置,很实用
ANT-build-xml文件详解 ANT-build-xml文件详解 ANT-build-xml文件详解
ANT使用指南ANT使用指南ANT使用指南ANT使用指南ANT使用指南ANT使用指南ANT使用指南ANT使用指南ANT使用指南
配置ant中的builder.xml文件。