Разбор HTML с использованием Ant Script - PullRequest
5 голосов
/ 15 сентября 2011

Мне нужно получить некоторые значения из файла HTML. Мне нужно использовать Ant, чтобы я мог использовать эти значения в других частях моего скрипта.

Можно ли этого достичь в Ant?

Ответы [ 4 ]

7 голосов
/ 15 сентября 2011

Как указано в других ответах, вы не можете сделать это в «чистом» XML. Вам необходимо встроить язык программирования. Мой личный фаворит - Groovy, он отлично интегрируется с ANT .

Вот пример, который получает URL логотипа с главной страницы groovy:

parse:

print:
     [echo] 
     [echo]         Logo URL: http://groovy.codehaus.org/images/groovy-logo-medium.png
     [echo]     

build.xml

Сборка использует подключаемый модуль ivy для извлечения всех сторонних зависимостей.

<project name="demo" default="print" xmlns:ivy="antlib:org.apache.ivy.ant">

    <target name="resolve">
        <ivy:resolve/>
        <ivy:cachepath pathid="build.path" conf="build"/>
    </target>

    <target name="parse" depends="resolve">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

        <groovy>
        import org.htmlcleaner.*

        def address = 'http://groovy.codehaus.org/'

        // Clean any messy HTML
        def cleaner = new HtmlCleaner()
        def node = cleaner.clean(address.toURL())

        // Convert from HTML to XML
        def props = cleaner.getProperties()
        def serializer = new SimpleXmlSerializer(props)
        def xml = serializer.getXmlAsString(node)

        // Parse the XML into a document we can work with
        def page = new XmlSlurper(false,false).parseText(xml)

        // Retrieve the logo URL
        properties["logo"] = page.body.div[0].div[1].div[0].div[0].div[0].img.@src
        </groovy>
    </target>

    <target name="print" depends="parse">
        <echo>
        Logo URL: ${logo}
        </echo>
    </target>

</project>

Логика синтаксического анализа - это просто отличное программирование. Мне нравится, как вы можете легко пройтись по дереву DOM страницы:

// Retrieve the logo URL
properties["logo"] = page.body.div[0].div[1].div[0].div[0].div[0].img.@src

ivy.xml

Ivy похож на Maven. Он управляет вашими зависимостями от стороннего программного обеспечения. Здесь он используется для удаления Groovy и библиотеки HTMLCleaner, которую использует Groovy логика:

<ivy-module version="2.0">
    <info organisation="org.myspotontheweb" module="demo"/>
    <configurations defaultconfmapping="build->default">
        <conf name="build" description="ANT tasks"/>
    </configurations>
    <dependencies>
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.2"/>
        <dependency org="net.sourceforge.htmlcleaner" name="htmlcleaner" rev="2.2"/>
    </dependencies>
</ivy-module>

Как установить плющ

Ivy - это стандартный плагин ANT. Загрузите флягу и поместите ее в один из следующих каталогов:

$HOME/.ant/lib
$ANT_HOME/lib

Я не знаю, почему проект ANT не поставляется с плющом.

3 голосов
/ 15 сентября 2011

Да, это очень возможно.

Обратите внимание, что для использования этого решения вам необходимо установить для переменной JAVA_HOME значение JRE 1.6 или более поздней.не знаю, какие именно переменные, которые вы искали для этого конкретного решения, найдут все элементы, которые вы указали в атрибуте тега.Конечно, вы можете изменить регулярное выражение в соответствии с вашими конкретными потребностями.

Кроме того, это чистый сборочный файл build.xml без каких-либо внешних зависимостей.

0 голосов
/ 16 сентября 2011

Посмотрите на задачу (http://ant.apache.org/manual/Tasks/xmlproperty.html) и посмотрите, будет ли она работать на вас. Это довольно просто:

<xmlProperty file="${html.file}"
   prefix="html."/>

В конце концов, HTML - это только подмножество XML.Я использовал его раньше, чтобы выполнить эту задачу. Не нужно писать свою задачу или скрипт.

0 голосов
/ 15 сентября 2011

Конечно, но вы должны написать собственное задание для этого. Посетите http://ant.apache.org/manual/develop.html#writingowntask для получения дополнительной информации о написании собственных задач для Ant. В задании Ant вы можете при необходимости проанализировать HTML-файл.

Я утверждаю, что напрямую с "чистым" XML (build.xml) невозможно достичь того, чего вы хотите.

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