我正在进行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>
答案 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有一些很好的例子。