使用Ant脚本解析HTML

Dec*_*ter 5 ant

我需要从HTML文件中检索一些值.我需要使用Ant,所以我可以在脚本的其他部分使用这些值.

这甚至可以在Ant中实现吗?

Mar*_*nor 7

如其他答案中所述,您无法在"纯"XML中执行此操作.你需要嵌入一种编程语言.我个人最喜欢的是Groovy,它与ANT的集成非常出色.

这是一个从groovy主页检索徽标URL的示例:

parse:

print:
     [echo] 
     [echo]         Logo URL: http://groovy.codehaus.org/images/groovy-logo-medium.png
     [echo]     
Run Code Online (Sandbox Code Playgroud)

build.xml文件

Build使用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>
Run Code Online (Sandbox Code Playgroud)

解析逻辑是纯粹的groovy编程.我喜欢你轻松浏览页面DOM树的方式:

// Retrieve the logo URL
properties["logo"] = page.body.div[0].div[1].div[0].div[0].div[0].img.@src
Run Code Online (Sandbox Code Playgroud)

的ivy.xml

常春藤类似于Maven.它管理您对第三方软件的依赖性.在这里它被用来拉下Groovy和Groovy逻辑正在使用的HTMLCleaner库:

<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>
Run Code Online (Sandbox Code Playgroud)

如何安装常春藤

Ivy是一个标准的ANT插件.下载它的jar并将其放在以下目录之一:

$HOME/.ant/lib
$ANT_HOME/lib
Run Code Online (Sandbox Code Playgroud)

我不知道为什么ANT项目不附带常春藤.