如何使用Ant从HTML元素中提取属性?

时间:2012-06-05 23:16:31

标签: html ant

我有一个变得复杂的ANT配置文件,现在我遇到了问题。其中一个任务从网站检索页面并将其保存到文件中。我需要加载这样的文件并从中提取特定元素的 href 属性。 HTML格式合理,但我无法保证。

我在考虑使用RegEx,但不保证元素的属性总是以相同的顺序出现(例如,它的类名或id)。此外,我还没有找到如何只返回 href 属性的,而没有属性本身。

我正在尝试限制要添加到ANT的插件数量,因此欢迎使用“自包含”解决方案。感谢。

1 个答案:

答案 0 :(得分:2)

我不确定你将如何找到具有你正在寻找的href的特定HTML元素(我假设通过检查id属性,但你没有这么说)。我把这个正则表达式链放在一起,将HTML过滤到候选锚标签,然后最终剥离出href的。我使用此页面的源代码作为我的示例输入,因为我找不到任何与锚点相关联的id属性(也有hrefs),我使用class =“question-hyperlink”过滤到锚点 - 我是希望这对你来说是一个很好的起点(并注意:正如你所规定的,它不包含任何对其他模块的依赖等,无论它们安装起来有多容易):

<?xml version="1.0" encoding="UTF-8"?>
<project name="Test Html attribute" default="test" basedir=".">
   <target name="test">

      <loadfile srcFile="ant.htm" property="html">
         <filterchain>
            <linecontainsregexp>
              <regexp pattern="&lt;a.*href[^&gt;]*&gt;"/>
              <regexp pattern="&lt;a.*class=[&quot;']question-hyperlink[&quot;'][^&gt;]*&gt;"/>
            </linecontainsregexp>
            <tokenfilter>
               <replaceregex pattern=".*&lt;a.*href=[&quot;']?([^&gt;&quot;']*).*&gt;[^&lt;]*" replace="\1" flags="gi"/>
            </tokenfilter>
         </filterchain>
      </loadfile>

      <echo>${html}</echo>
   </target>
</project>