繁体   English   中英

如何在给定的选择范围内使用Jsoup解析元素?

[英]How to parse elements with Jsoup in given select range?

嗨,我正在尝试使用Jsoup解析整堆html,但是无法达到预期的目标。 我是从生成的javadoc解析它的,因为它缺少id或其他有用的元素来进行解析。 另外一个问题是我必须解析同一文档中的相同标签,因此我不能严格定义选择。 我设法做到了,但是方法名称仍然有问题,这在DOM的另一个同级中。 这是我的html和所需的解析结果: http : //img62.imageshack.us/img62/9870/08bz.png

我必须以某种方式“绑定”“ pre”和“ ol”标签(解析所需的html范围)。 请帮我。

尝试通过以下方式进行操作: Elements methodName = doc.select("pre:contains(public), dl > dd > ol"); 但这给我返回了太多的方法名称。

如果我正确理解,则只需要public void method_name()和解释该方法作用的列表项,而没有任何其他html标记。

Elements methodName = doc.select("pre:contains(public), dl > dd > ol > li");

这将总共选择4个元素-方法名称和三个列表项,但是它们周围仍将带有html标签,例如<pre><li> 在每个Element上调用text()方法以删除这些标签:

for (Element e : methodName) {  
    System.out.println(e.text());
}

哪个输出:

11-08 10:47:19.468: I/System.out(816): public void test()
11-08 10:47:19.468: I/System.out(816): Navigates to app
11-08 10:47:19.468: I/System.out(816): opens main panel
11-08 10:47:19.478: I/System.out(816): starts it

由于缺少任何id属性,我认为无法通过一个select语句仅选择相关标签。 因此,相反,您可以遍历您选择的Elements并检查<pre>标记后是否带有<li>标记(假设您使用的是我在第一个答案中使用的同一doc.select()语句)。

例:

Elements methodName = doc.select("pre:contains(public), dl > dd > ol > li");

for (int i = 0; i < methodName.size(); i++) {
    if (methodName.get(i).tagName().equals("pre")) {        // if the <pre> tag
        if (methodName.get(i + 1).tagName().equals("li")) { // is followed by a <li> tag
            System.out.println(methodName.get(i).text());   // print it
        }
    } else System.out.println(methodName.get(i).text());    // else it is a <li> tag so print it
}  

这将提供与我的第一个示例相同的输出,即使还有两个其他<pre>标记的methodNames之后没有<ol>列表(如您在评论中所提到的)。

注意:根据文档的格式设置,您可能必须注意IndexOutOfBoundsException (当我称i + 1 ),但是您可以为此添加另一个检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM