为什么JSoup中可能缺少某些方法?

时间:2015-08-20 20:43:36

标签: java coldfusion jsoup

我正在使用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>

输出如下所示,突出显示所需的方法:

1 个答案:

答案 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(在大多数方面)。

相关问题