【问题标题】:iterate over unknown number of properties using ant and search and replace使用 ant 迭代未知数量的属性并搜索和替换
【发布时间】:2012-08-24 18:03:35
【问题描述】:

我有一个看起来像这样的 ant “属性”文件(尽管我可以根据需要调整格式 - 如果更合适的话,我可以将其设为 XML 文件):

libraries.properties

name 1
http://www.url1.com?a=b
name 2
http://www.url2.com?c=d
name 3
http://www.url3.com?e=f

注意:我知道这不是有效的属性格式,因为它不是 a=b 的形式。我可以将其更改为任何合适的内容,只要以后易于添加条目即可。

我想让ant拿一个签入的文件如下:

options.html(来源)

<select>
    <option value="@URL@">@NAME@</option>
</select>

... 对标记进行搜索和替换次数与libraries.properties 中的名称/值条目一样,因此得到的options.html 文件如下所示:

options.html(构建后)

<select>
    <option value="http://www.url1.com?a=b">name 1</option>
    <option value="http://www.url2.com?c=d">name 2</option>
    <option value="http://www.url3.com?3=f">name 3</option>
</select>

与属性文件一样,options.html 源文件可以是不同的格式。我只需要某种方式来定义我从/到复制的内容。

最干净的方法是什么?

谢谢!

【问题讨论】:

    标签: ant


    【解决方案1】:

    您需要一个templating engine 来生成您的 HTML 文件。

    ANT 直接支持的最接近这个的是XSLT transformation

    示例

    以下项目

    |-- build.xml
    `-- src
        |-- options.xsl
        `-- properties.xml
    

    运行时生成单个 HTML 文件

    |-- build
    |   `-- options.html
    

    注意,这不是一个格式正确的 HTML 文件。您的规范看起来更像是设计用于导入另一个文件的片段。

    properties.xml

    <properties>
        <property>
            <name>name 1</name>
            <value>http://www.url1.com?a=b</value>
        </property>
        <property>
            <name>name 2</name>
            <value>http://www.url2.com?c=d</value>
        </property>
        <property>
            <name>name 3</name>
            <value>http://www.url3.com?e=f</value>
        </property>
    </properties>
    

    options.xsl

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    
        <xsl:output method="html"/>
    
        <xsl:template match="/">
            <select>
                <xsl:apply-templates select="properties/property"/>
            </select>
        </xsl:template>
    
        <xsl:template match="property">
            <option value="{value}"><xsl:value-of select="name"/></option>
        </xsl:template>
    
    </xsl:stylesheet>
    

    build.xml

    <project name="demo" default="generate">
    
        <target name="init">
            <mkdir dir="build"/>
        </target>
    
        <target name="generate" depends="init">
            <xslt style="src/options.xsl" in="src/properties.xml" out="build/options.html"/>
        </target>
    
        <target name="clean">
            <delete dir="build"/>
        </target>
    
    </project>
    

    【讨论】:

    • 感谢您的详细建议。它完美地工作,并且比我在发布我的问题后实施的 kludge 优雅得多。 (我在目标文件中添加了一个标记,然后多次搜索和替换以构建选项列表)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2014-07-27
    • 2010-12-15
    • 2014-01-18
    • 2016-09-29
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多