我正在使用JSoup 1.8.3和ColdFusion 10并选择了一个DOM element。我试着打电话给ownText(),它不接受任何争论而且我没有给出任何参数,但我一直收到错误:
"找不到ownText方法。要么没有方法 指定的方法名称和参数类型或者ownText方法是 重载了ColdFusion无法破译的参数类型 可靠。 ColdFusion找到了与提供的匹配的0个方法 参数。如果这是一个Java对象并且您验证了该方法 存在,使用javacast函数来减少歧义。"
错误文本表明可以通过更明确地转换参数来解决问题,但没有参数。我尝试将一个强制转换添加到null,但这并没有解决问题。
如果我尝试调用textNodes(),则会发生同样的错误。但是,我可以调用text(),它会准确地返回调用所期望的内容(我正在寻找的内容的超集)。当我在调用之前转储调用on的变量时,我看到它应该是org.jsoup.nodes.Element类,我可以看到两个ownText( )和textNodes()就在应该可用的方法列表中,以及text()工作正常。
为什么其中一些方法不起作用,我如何访问它们?
代码示例:
<CFOUTPUT>
<cfset html = ' <html> ' >
<cfset html &= ' <head> <title> Bug Demo</title> </head> ' >
<cfset html &= ' <body><div class="wrapper" > ' >
<cfset html &= ' <div class="textSection" > ' >
<cfset html &= ' <h3><a href="http://example.com"> Undesired Link Text </a></h3> ' >
<cfset html &= ' This is the target text that the code below should extract.' >
<cfset html &= ' </div> ' >
<cfset html &= ' <div class="imageSection" > ' >
<cfset html &= ' <a href="http://example.com"><img src="/example.png"/></a> ' >
<cfset html &= ' </div> ' >
<cfset html &= ' </div> ' >
<cfset html &= '</body></html> '>
<cfscript>
//Load jSoup
paths = arrayNew(1);
paths[1] = expandPath("jsoup-1.8.3.jar");
loader = createObject("component", "colab.javaloader.javaloader.JavaLoader").init(paths);
jSoupClass = loader.create("org.jsoup.Jsoup");
//Parse document
dom = jSoupClass.parse(html);
wrapper = dom.select( JavaCast("string", "div.wrapper") ).first();
textSection = wrapper.select("div.textSection");
writeDump(textSection); //show type and methods of textSection
targetText = textSection.ownText(); //Error: method not found - ???
//targetText = textSection.ownText(JavaCast("null", "")); //also not found, but there should be no parameter
//textNodes = textSection.textNodes(); //Also not found
tooMuchInfo = textSection.text(); //works just fine
WriteOutput(tooMuchInfo);//produces "Undesired Link Text This is the target text that the code below should extract. "
</cfscript>
</CFOUTPUT>
输出如下所示,突出显示所需的方法:
答案 0 :(得分:3)
当我在调用之前转储变量I&#39; m时,我看到它的类org.jsoup.nodes.Element
不完全。
textSection
是一个包含该类实例的数组。但是,变量本身实际上是org.jsoup.select.Elements
的一个实例(注意&#34; s&#34; ,复数,完全不同的类)。这个其他类恰好恰好包含一个名为text()的方法,但没有一个名为ownText()。因此异常,即&#34; ...没有指定方法名称的方法......&#34;。
你需要抓取里面数组中的一个对象,即Element
(单数),然后在该对象上调用方法,即:
textSection[1].ownText();
NB:从技术上讲,org.jsoup.select.Elements
本身不是数组,而是实现java.util.List
的类。所以它可以用like a CF array(在大多数方面)。