遍历未知数量的属性使用Ant和搜索和替换(iterate over unknown number o

2019-09-21 15:06发布

我有一只蚂蚁“属性”文件看起来像这样(但如果需要,我可以调整格式 - 我可以把它的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。 我可以,因为它很容易在未来添加条目将其更改为任何是适当的,只要。

我想蚂蚁采取检查,在如下文件:

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源可以是不同的格式。 我只需要定义什么我从/复制的某种方式。

什么是做到这一点的干净的方式?

谢谢!

Answer 1:

你需要的是一个模板引擎来生成HTML文件。

最接近的事情这一点,ANT直接支持是一个XSLT转换 。

以下项目

|-- 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>


文章来源: iterate over unknown number of properties using ant and search and replace
标签: ant