【问题标题】:how can i get a matching string from a xml file using <getxmlproperties> tag using ant and replace the matched string in other xml file如何使用 ant 使用 <getxmlproperties> 标记从 xml 文件中获取匹配字符串并替换其他 xml 文件中的匹配字符串
【发布时间】:2020-12-28 03:34:37
【问题描述】:

我的要求是匹配 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>

我该如何解决这个问题?提前致谢

【问题讨论】:

    标签: java xml build ant devops


    【解决方案1】:

    我没有找到任何名为GetXmlProperties 的Ant 任务,但我想你可能已经想到了这个XmlProperty,它通过解析XML 文档组成了一系列属性。

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

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

    2. 因此我提出第二种方法,即使用XmlTask,如下例所示。为我们新解析的属性添加前缀xml 可以更容易地将它们与其他属性区分开来。出于演示目的,我们还让构建过程使用EchoProperties 任务将xml 前缀下的所有新属性记录到控制台。

    <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() 更改为更精细的东西需要它,因为按照现在的方式,它将替换它在整个 display.xml 文档中找到的 all data 元素的值。

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 1970-01-01
      • 2021-06-10
      • 1970-01-01
      • 2021-05-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 2011-10-23
      相关资源
      最近更新 更多