一般的文本搜索替换操作,使用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>
相关推荐
- **执行构建**:在命令行中使用`ant`命令执行构建过程。例如: ``` ant clean build ``` 这里`clean`和`build`是两个目标,分别表示清理旧的构建结果和重新构建项目。 #### 五、Ant核心任务介绍 - **javac**...
属性值在任务中通过`${}`引用。 Ant提供多种内置任务,如: - `copy`:复制文件或目录。 - `delete`:删除文件或目录。 - `mkdir`:创建目录。 - `move`:移动文件或目录。 - `echo`:输出信息,支持message、file...
你可以将xmltask.jar放在Ant的lib目录下,或者在你的构建脚本中使用`<classpath>`元素指定它的位置。例如: ```xml ``` 接下来,我们需要在Ant的build.xml文件中引入XMLTask。使用`<taskdef>`元素定义一个名为...
- `-Dproperty=value`:设置属性值。 #### 四、构建文件(build.xml) Ant 的核心是 build.xml 文件,这是一个 XML 文件,定义了项目的构建过程。 ##### 4.1 Projects 元素 `<project>` 元素是构建文件的根节点,...
可以通过命令行参数或在`build.xml`文件中设置属性值。 - **Dependency**:Ant支持定义任务之间的依赖关系,确保构建过程按正确的顺序执行。 #### 四、Ant的安装与配置 1. **下载与安装**:访问Apache官方网站...
XMLtask是一款强大的Ant任务,它可以直接在XML文件中执行操作,比如插入、更新、删除或者复制元素。在Android开发中,XMLtask常被用来自动化处理Android项目的XML资源文件,如AndroidManifest.xml、build.gradle或者...
`property`元素用于设置属性值,如源代码和输出目录。`path`元素定义了类路径,`pathelement`是类路径中的一个条目。 `target`元素代表一个可执行的任务,比如`init`、`compile`和`dist`。`depends`属性指定目标...
### ant标签详解 #### 1. `<project>` 标签 `<project>` 标签是构建文件的基础,每一个构建文件都有一个对应的项目,并且此标签作为构建文件的根节点。`<project>` 标签支持多种属性: - **default**:指定构建...
1. **下载Ant**:访问官方下载页面(http://ant.apache.org/),选择合适的版本进行下载,本文中使用的版本为1.7.0。 2. **解压Ant**:将下载的压缩包解压至目标目录,例如`E:\apache-ant-1.7.0`。 3. **配置环境...
- **XML配置**:Ant使用XML文件来进行配置,这使得构建脚本比传统的Makefile更容易阅读和维护。 - **强大的任务库**:Ant内置了大量的任务,这些任务覆盖了从编译、测试到打包、部署等各种常见的构建需求。 - **灵活...
2. **属性与属性文件**:Ant支持定义和使用属性,允许动态地配置值。属性可以通过`<property>`元素定义,并且可以在属性文件中进行集中管理,以提高可配置性。 3. **依赖关系**:通过`depends`属性,一个目标可以...
最后,FreeMarker的手册还包含了丰富的参考文档,其中包括内建函数的详细说明,这些函数包括用于字符串、数字、日期、布尔值、序列、哈希表和XML节点的内建函数。此外,指令参考文档部分详细描述了各种指令的用途和...
在给定的代码示例中,展示了如何使用StAX解析XML文件,查找并打印出Ant构建脚本中的所有目标。首先,创建一个`XMLEventReader`实例,指向XML文件,然后通过`nextEvent()`方法循环获取XML事件。当遇到开始元素事件(`...
在mapred-site.xml文件中,设置mapreduce.framework.name属性为yarn,表示使用YARN(Yet Another Resource Negotiator)作为作业调度器。 YARN的配置在yarn-site.xml中进行,这里主要设置ResourceManager和...
name是project节点常用的属性,也是必设且值唯一的属性,该属性的值会在整个CruiseControl系统使用,包括配置文件的${project.name}变量值。 3.2.轮询版本控制系统 版本库轮询机制是使用modificationset进行配置的...
- **4.9 和Ant一起使用FreeMarker**:指导如何在Ant构建脚本中使用FreeMarker。 - **4.10 Jython包装器**:介绍了一个用于Python语言的包装器。 #### 五、XML处理指南 这部分内容主要涵盖了FreeMarker如何处理XML...
- **在servlets中使用FreeMarker**:集成FreeMarker到Web应用程序。 - **为FreeMarker配置安全策略**:提高安全性。 - **遗留的XML包装实现**:兼容旧版本的XML处理方式。 - **和Ant一起使用FreeMarker**:集成到...