问题描述
我的要求是匹配data.xml文件中的以下标记,并使用ant替换display.xml文件中的内容
data.xml
--------
<data>123456789</data>
display.xml
-----------
<data>abcdefg</data
我需要匹配data.xml文件中的内容,并将其替换为display.xml文件中的内容。
我的最终输出应为:
data.xml
--------
<data>123456789</data>
display.xml
-----------
<data>123456789</data>
我该如何解决此问题?预先感谢
解决方法
我没有找到任何名为GetXmlProperties
的Ant任务,但是我想您可能已经想到过这个XmlProperty
,该任务由解析XML文档组成一系列属性。
想到两种实现您想要的方法(可能还有更多):
-
最原始的方法是仅使用
XmlProperty
任务检索有问题的值,并在目标文件上使用粗略的Replace
任务,通过处理以下内容来进行简单的字符串替换目的地为纯文本文件,而不是关心其中的XML逻辑。但是,进行字符串匹配并替换为XML数据并不容易且容易出错。 -
因此,根据下面的示例,我提出了第二种方法,即使用
XmlTask
。在我们新解析的属性中添加前缀xml
可以更轻松地将它们与其余属性区分开。出于演示目的,我们还通过使用xml
任务,使构建过程将EchoProperties
前缀下的所有新属性记录到控制台。
<project name="SO63816092" default="default">
<taskdef name="xmltask" classname="com.oopsconsultancy.xmltask.ant.XmlTask" />
<xmlproperty file="data.xml" prefix="xml" />
<echoproperties prefix="xml"/>
<target name="default">
<xmltask source="display.xml" dest="display.xml" failWithoutMatch="true">
<replace path="//data/text()" withText="${xml.data}" />
</xmltask>
</target>
</project>
使用第二种方法,同时使用以下输入文件data.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<data>123456789</data>
和以下目标文件display.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<data>abcdefg</data>
我可以成功完成您的要求,并让display.xml
成为:
<?xml version="1.0" encoding="UTF-8"?>
<data>123456789</data>
只需记住将XmlTask
Java jar放在Ant进程的当前类路径中,并注意,您可能需要将XPath表达式(我们使用//data/text()
更改为更精致的东西,如果您的文档结构需要它,因为现在,它将替换整个data
文档中找到的 all display.xml
元素的值。>