0

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

我在想一个正则表达式,但不能保证元素的属性总是以相同的顺序出现(例如它的类名或 id)。此外,我还没有找到如何只返回href属性的,而没有属性本身。

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

4

1 回答 1

2

我不确定您将如何找到具有您要查找的 href 的特定 HTML 元素(我假设通过检查 id 属性,但您没有这么说)。我将这条正则表达式链放在一起,将 HTML 过滤为候选锚标记,然后最终只去除 href。我使用这个页面的源作为我的示例输入,因为我找不到任何与锚相关联的 id 属性(也有 href),我过滤到带有 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>
于 2012-06-18T22:17:29.260 回答