Как указать XML-документы для преобразования с коллекцией ресурсов в Ant? - PullRequest
0 голосов
/ 21 августа 2010

Я пытаюсь использовать ant для использования XSLT для предварительной обработки трех конкретных таблиц стилей в моем проекте. В документации Ant для задачи xslt говорится, что она должна принимать любую коллекцию ресурсов. В частности, он говорит:

Используйте коллекции ресурсов, чтобы указать ресурсы, к которым должна применяться таблица стилей. Используйте вложенный преобразователь и атрибут destdir задачи, чтобы указать выходные файлы.

Поэтому я попытался указать эти таблицы стилей, используя набор файлов, и использовать набор файлов в качестве вложенного элемента в задаче xslt, но пока это не работает. Вместо этого он, по-видимому, игнорирует указанный набор файлов и сканирует весь проект на наличие файлов, заканчивающихся на .xsl, применяет к ним таблицу стилей и присваивает выходные данные в соответствии с логикой, указанной в преобразователе.

<fileset id="stylesheets-to-preprocess" dir="${basedir}">
    <filename name="src/xslt/backends/js/StatePatternStatechartGenerator.xsl"/>
    <filename name="src/xslt/backends/js/StateTableStatechartGenerator.xsl"/>
    <filename name="src/xslt/backends/js/SwitchyardStatechartGenerator.xsl"/>
</fileset>

<!-- ... -->

<target name="preprocess-stylesheets" depends="init">

    <xslt 
        classpathref="xslt-processor-classpath" 
        style="src/xslt/util/preprocess_import.xsl" 
        destdir="build"
        scanincludeddirectories="false">

        <fileset refid="stylesheets-to-preprocess"/>
        <mapper>
            <chainedmapper>
                <flattenmapper/>
                <globmapper from="*.xsl" to="*_combined.xsl"/>
            </chainedmapper>
        </mapper>
    </xslt>

</target>

Я хотел бы ограничить его так, чтобы обрабатывались только те файлы, которые указаны в наборе файлов.

Удаление сопоставителя, так что набор файлов является единственным вложенным элементом, приведет к тому, что ant попытается применить преобразование к каждому файлу, даже к тем, у которых нет расширений xsl, что неизбежно завершится неудачей при попытке преобразовать документ не в формате XML.

Я использую муравей 1.7.1. Любое руководство будет оценено.

1 Ответ

2 голосов
/ 21 августа 2010

Ваша проблема вызвана неявной функциональностью набора файлов. Чтобы использовать параметр вложенного набора файлов, необходимо отключить эту функцию.

Я бы также рекомендовал использовать параметр "include" в наборе файлов, что намного проще и позволяет избежать необходимости в сложном элементе mapper (вы должны указать расширение сгенерированных файлов, в противном случае он по умолчанию будет иметь значение .html)

<target name="preprocess-stylesheets" depends="init">

    <xslt 
        classpathref="xslt-processor-classpath" 
        style="src/xslt/util/preprocess_import.xsl" 
        destdir="build"
        extension=".xsl"
        useImplicitFileset="false"
        >

        <fileset dir="src/xslt/backends">
            <include name="StatePatternStatechartGenerator.xsl"/>
            <include name="StateTableStatechartGenerator.xsl"/>
            <include name="SwitchyardStatechartGenerator.xsl"/>
        </fileset>
    </xslt>

</target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...