如何使用ant使用<getxmlproperties>标记从xml文件中获取匹配的字符串,并在其他xml文件中替换匹配的字符串

问题描述

我的要求是匹配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文档组成一系列属性。

想到两种实现您想要的方法(可能还有更多):

  1. 最原始的方法是仅使用XmlProperty任务检索有问题的值,并在目标文件上使用粗略的Replace任务,通过处理以下内容来进行简单的字符串替换目的地为纯文本文件,而不是关心其中的XML逻辑。但是,进行字符串匹配并替换为XML数据并不容易且容易出错。

  2. 因此,根据下面的示例,我提出了第二种方法,即使用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元素的值。>