需要从外部页面获取特定数据

时间:2014-12-03 22:03:30

标签: regex coldfusion

我正在进行cfhttp调用并重新获取数据..

现在我得到一个如下所示的完整页面:

<html><title>MyPage</title><head><link rel="stylesheet" href="style.css"></head>
<body>
<table></table>
<table></table>
<table></table>
<table></table>
<table></table>
<table></table>
</body>
</html>

现在问题我想要在body标签内部的代码,并且还完全删除最后一个表标签。

我不知道从哪里开始 [p.s JSOUP不是一个选项]

尝试如下,但没有产生任何结果:

<cfset objPattern = CreateObject("java","java.util.regex.Pattern").Compile(JavaCast("string","(?i)<table[^>]*>([\w\W](?!<table))+?</table>"))>  
    <cfset objMatcher = objPattern.Matcher(JavaCast( "string", cfhttp.FileContent ))> 
    <cfoutput>#objMatcher#</cfoutput>

1 个答案:

答案 0 :(得分:2)

就说服客户而言,解释虽然正则表达式对某些工作很有用,但它们并不是解析html的最佳工具。 JSoup不是外部服务。它是为此任务设计的专门的预构建库(与正则表达式不同)。

JSoup使用起来非常简单,类似于使用javascript的DOM。只需将JSoup jar添加到类路径中(如果需要,重新启动),它就可以使用了。

  

我想要身份标签内的代码,也要删除   最后一个表标签。

将html内容加载到Document对象中并获取<body>元素:

jsoup = createObject("java", "org.jsoup.Jsoup");
doc = jsoup.parse( yourHTMLContentString );
body = doc.body();

使用selector抓取并移除最后 <table>元素:

elem = doc.select("table:last-of-type");
elem.remove();

就是这样。现在,您可以使用<body>元素打印或执行任何操作:

writeOutput( HTMLEditFormat(body.html()) );

有关详细信息,请参阅其文档。特别是,JSoup Cookbook有一些很好的例子。