从来就与下面的结构一个XML文件。 我想读通过节点的首肯,并呼吁同值的特定任务,而不黎民separator.In蚂蚁,这是可能的吗?
<projects>
<!-- first node -->
<project>
<name> </name>
<url> </url>
<package> </package>
</project>
<!-- Second node -->
<project>
<name> </name>
<url> </url>
<package> </package>
</project>
<projects>
谢谢!
使用XSLT任务来处理输入XML文件导入,随后执行的Ant脚本。
例
|-- build.xml
|-- projects-process.xsl
`-- projects.xml
运行后会处理的信息
$ ant
Buildfile: /home/mark/tmp/build.xml
run-projects:
[xslt] Processing /home/mark/tmp/projects.xml to /home/mark/tmp/build-tmp.xml
[xslt] Loading stylesheet /home/mark/tmp/projects-process.xsl
build:
dosomething:
[echo] DOSOMETHING: 'Project 1' 'http://someurl1' 'project1'"
dosomething:
[echo] DOSOMETHING: 'Project 2' 'http://someurl2' 'project2'"
BUILD SUCCESSFUL
projects.xml
<projects>
<project>
<name>Project 1</name>
<url>http://someurl1</url>
<package>project1</package>
</project>
<project>
<name>Project 2</name>
<url>http://someurl2</url>
<package>project2</package>
</project>
</projects>
项目-process.xsl
这XSLT样式表是用来生成Ant脚本
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<project name="genbuild" default="build">
<target name="build">
<xsl:apply-templates select="projects/project"/>
</target>
<target name="dosomething">
<echo>DOSOMETHING: '${name}' '${url}' '${package}'"</echo>
</target>
</project>
</xsl:template>
<xsl:template match="project">
<antcall target="dosomething">
<param name="name" value="{name}"/>
<param name="url" value="{url}"/>
<param name="package" value="{package}"/>
</antcall>
</xsl:template>
</xsl:stylesheet>
build.xml文件
运行XSLT转换处理projects.xml文件并生成一个Ant构建文件
<project name="demo" default="run-projects">
<target name="run-projects">
<xslt style="projects-process.xsl" in="projects.xml" out="build-tmp.xml"/>
<ant antfile="build-tmp.xml"/>
</target>
<target name="clean">
<delete file="build-tmp.xml"/>
</target>
</project>
蚂蚁的项目不能嵌套在同一Ant构建文件中。 然而,建立逻辑可以使用模块化MacroDefs 。 此外,子项目都可以有自己的构建文件,可以从使用一个主构建文件被称为蚂蚁 Ant任务。 Ant目标可以使用同一个构建文件中被称为AntCall任务 。
thiagolsilva,
使用XMLProperty中和JavaScript的组合,我能在蚂蚁拆分projects.xml文件和使用项目节点的数据字段的多元素(同一节点)。 所有操作都在一个单一的蚂蚁文件执行,在一个单一的执行。
从上面的例子中的样品数据projects.xml文件:
<projects>
<project>
<name>Project 1</name>
<url>//someurl1</url>
<package>project1</package>
</project>
<project>
<name>Project 2</name>
<url>//someurl2</url>
<package>project2</package>
</project>
</projects>
已改造成以下projects.xml文件的格式:
<myProjects>
<!-- name;url;package -->
<myProject>Project 1;//someurl1;project1</myProject>
<myProject>Project 2;//someurl2;project2</myProject>
</myProjects>
这里,前一节点元素转化成单个串与由分隔的字段“;” 字符。
我已重命名的元素“工程”,“myProject的”为了避免混淆,我将使用蚂蚁“项目”对象在JavaScript。
一旦我们已经夷为平地重复的XML节点转换成字符串,我们可以使用下面的ant脚本通过元素迭代,阅读扁平性质和我们希望使用它们。
<project name="testProjects" default="ProcessProjects" basedir=".">
<target name="init" >
<!-- From: http://sourceforge.net/projects/ant-contrib/files/ant-contrib/
download the jar and put it a created "lib" folder of your project, where ant file is.
-->
<taskdef resource="net/sf/antcontrib/antlib.xml">
<classpath><pathelement location="./lib/ant-contrib-1.0b3.jar"/></classpath>
</taskdef>
<xmlproperty file="./projects.xml" keepRoot="false"/>
<!-- Properties will be used to store the values of: name;url;package -->
<property name="name" value=""/>
<property name="url" value=""/>
<property name="package" value=""/>
</target>
<target name="ProcessProjects" depends="init">
<echo>Process Projects</echo>
<foreach list="${myProject}" target="processLoopStep" param="var1"/>
</target>
<target name="processLoopStep" >
<script language="javascript"> <![CDATA[
var var1 = project.getProperty("var1");
var parts = var1.split(";");
project.setProperty("name",parts[0]);
project.setProperty("url",parts[1]);
project.setProperty("package",parts[2]);
]]>
</script>
<!-- Do what you like with the values of the <project> element -->
<echo message="myProject name = ${name} url = ${url} package = ${package}"/>
</target>
</project>
中的文件: - C:\ TEMP \ LIB \ ProcessProjects.xml - 构建 - C:\ TEMP \ LIB \ projects.xml - 数据 - C:\ TEMP \ LIB \蚂蚁的contrib-1.0b3.jar - 中LIB罐子
输出:
C:\temp>ant -f ProcessProjects.xml
Buildfile: C:\temp\ProcessProjects.xml
init:
ProcessProjects:
[echo] Process Projects
processLoopStep:
[echo] myProject name = Project 1 url = //someurl1 package = project1
processLoopStep:
[echo] myProject name = Project 2 url = //someurl2 package = project2
BUILD SUCCESSFUL
Total time: 0 seconds
问候,尤雷克