`

使用Ant替换xml中节点下的属性值或者内容

    博客分类:
  • Ant
 
阅读更多

   一般的文本搜索替换操作,使用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>

 

 

 

 

  • 大小: 9.3 KB
1
1
分享到:
评论

相关推荐

    ant简明教程;ant调用bat方法

    属性值在任务中通过`${}`引用。 Ant提供多种内置任务,如: - `copy`:复制文件或目录。 - `delete`:删除文件或目录。 - `mkdir`:创建目录。 - `move`:移动文件或目录。 - `echo`:输出信息,支持message、file...

    ant获取SVN版本信息的jar包xmltask以及安装,使用方法

    你可以将xmltask.jar放在Ant的lib目录下,或者在你的构建脚本中使用`&lt;classpath&gt;`元素指定它的位置。例如: ```xml ``` 接下来,我们需要在Ant的build.xml文件中引入XMLTask。使用`&lt;taskdef&gt;`元素定义一个名为...

    Ant基本使用指南--从入门到精通

    - `-Dproperty=value`:设置属性值。 #### 四、构建文件(build.xml) Ant 的核心是 build.xml 文件,这是一个 XML 文件,定义了项目的构建过程。 ##### 4.1 Projects 元素 `&lt;project&gt;` 元素是构建文件的根节点,...

    xmltask.jar工具包.zip

    XMLtask是一款强大的Ant任务,它可以直接在XML文件中执行操作,比如插入、更新、删除或者复制元素。在Android开发中,XMLtask常被用来自动化处理Android项目的XML资源文件,如AndroidManifest.xml、build.gradle或者...

    ant使用手册

    `property`元素用于设置属性值,如源代码和输出目录。`path`元素定义了类路径,`pathelement`是类路径中的一个条目。 `target`元素代表一个可执行的任务,比如`init`、`compile`和`dist`。`depends`属性指定目标...

    ant标签详解

    ### ant标签详解 #### 1. `&lt;project&gt;` 标签 `&lt;project&gt;` 标签是构建文件的基础,每一个构建文件都有一个对应的项目,并且此标签作为构建文件的根节点。`&lt;project&gt;` 标签支持多种属性: - **default**:指定构建...

    Ant管理

    2. **属性与属性文件**:Ant支持定义和使用属性,允许动态地配置值。属性可以通过`&lt;property&gt;`元素定义,并且可以在属性文件中进行集中管理,以提高可配置性。 3. **依赖关系**:通过`depends`属性,一个目标可以...

    FreeMarker_Manual_zh_CN.pdf

    最后,FreeMarker的手册还包含了丰富的参考文档,其中包括内建函数的详细说明,这些函数包括用于字符串、数字、日期、布尔值、序列、哈希表和XML节点的内建函数。此外,指令参考文档部分详细描述了各种指令的用途和...

    JAVA 技术文章收集.doc

    在给定的代码示例中,展示了如何使用StAX解析XML文件,查找并打印出Ant构建脚本中的所有目标。首先,创建一个`XMLEventReader`实例,指向XML文件,然后通过`nextEvent()`方法循环获取XML事件。当遇到开始元素事件(`...

    在windows下搭建hadoop2开发环境小案例

    在mapred-site.xml文件中,设置mapreduce.framework.name属性为yarn,表示使用YARN(Yet Another Resource Negotiator)作为作业调度器。 YARN的配置在yarn-site.xml中进行,这里主要设置ResourceManager和...

    利用CruiseControl软件进行持续集成

    name是project节点常用的属性,也是必设且值唯一的属性,该属性的值会在整个CruiseControl系统使用,包括配置文件的${project.name}变量值。 3.2.轮询版本控制系统 版本库轮询机制是使用modificationset进行配置的...

    FreeMarker中文手册

    - **4.9 和Ant一起使用FreeMarker**:指导如何在Ant构建脚本中使用FreeMarker。 - **4.10 Jython包装器**:介绍了一个用于Python语言的包装器。 #### 五、XML处理指南 这部分内容主要涵盖了FreeMarker如何处理XML...

Global site tag (gtag.js) - Google Analytics