0

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

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

...并根据 library.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 源可以是不同的格式。我只需要某种方式来定义我从中/向复制的内容。

最干净的方法是什么?

谢谢!

4

1 回答 1

3

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

ANT 直接支持的最接近这一点的是XSLT 转换

例子

以下项目

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

运行时生成单个 HTML 文件

|-- build
|   `-- options.html

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

属性.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>

选项.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>

构建.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>
于 2012-08-25T12:14:24.287 回答