【问题标题】:ANT override deafult comma list delimiterANT 覆盖默认逗号列表分隔符
【发布时间】:2014-04-23 18:16:15
【问题描述】:

我有一个脚本扫描名称/值对 xml 并填充值以供将来翻译的需求。

这是一个示例 Test.xml

<?xml version="1.0" encoding="UTF-8"?>
<consumer>
<name>Sprint-1</name>
<value>1.0.0, 1.0.1</value>
<name>Sprint-2</name>
<value>1.1.0, 1.1.1</value>
<name>Sprint-3</name>
<value>1.2.0, 1.2.1</value>
</consumer>

这是我的 ant 脚本:

<xmlproperty file="Test.xml" collapseAttributes="true"/>
<for list="${consumer.name}" param="letter" delimiter=",">
        <sequential>
        <echo>@{letter}</echo>
    </sequential>
    </for>
<for list="${consumer.value}" param="string" delimiter=",">
    <sequential>
         <echo>@{string}</echo>
     </sequential>
    </for>

输出:

   [echo] Sprint-1
   [echo] Sprint-2
   [echo] Sprint-3
   [echo] 1.0.0
   [echo]  1.0.1
   [echo] 1.1.0
   [echo]  1.1.1
   [echo] 1.2.0
   [echo]  1.2.1    

很明显,输出不包含任何“,”分隔值,因为 ANT 通过使用默认的“,”分隔符分隔输入值来标记输入值。

想知道我们是否可以覆盖ant中的“,”分隔符,以便默认情况下它使用类似“|”的东西同时从 xml 文件中扫描值?

那么我可以使用:

for list="${consumer.value}" param="string" delimiter="|"

ANTXtras 似乎提供了这个功能,但我无法让它工作:(

感谢您的帮助。

谢谢, 桑迪普

【问题讨论】:

  • 不分隔符="|"工作吗?
  • @MarkO'Connor 感谢马克的输入!只是我之前没有想到下面的变化就像一个魅力。

标签: xml ant ant-contrib


【解决方案1】:

@aaW

是的,我们可以使用 delimiter="|"在 for 循环中 - 但仅当列表本身用“|”标记时分隔符。

问题出在你使用的时候

<xmlproperty file="Test.xml" collapseAttributes="true"/> 

ANT 默认扫描文件并使用“,”分隔符保存列表,我想覆盖此默认行为。

事实上,在输入此内容时,我只是有一个 Eureka 时刻(感谢 Mark!)并尝试使用

<xmlproperty file="Test.xml" collapseAttributes="true" delimiter="|"/>

现在我的脚本按预期工作了。

Output:

Test:
   [echo] Sprint-1
   [echo] Sprint-2
   [echo] Sprint-3
   [echo] 1.0.0, 1.0.1
   [echo] 1.1.0, 1.1.1
   [echo] 1.2.0, 1.2.1

【讨论】:

  • 很高兴看到 xmlproperty 任务对“分隔符”的支持
【解决方案2】:

Per : http://ant-contrib.sourceforge.net/tasks/tasks/for.html ,对于 ant-contrib 任务使用逗号作为默认分隔符。您可以覆盖所需的值:

The delimiter characters that separates the values in the "list" attribute. 
Each character in the supplied string can act as a delimiter. 
This follows the semantics of the StringTokenizer class.

必填

No, defaults to ",".

所以你可以改变看起来像:

<for list="${consumer.value}" param="string" delimiter="|">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多