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

标签 java parsing jsoup

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

我必须以某种方式“绑定(bind)”“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> 。调用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 时),但您可以为此添加另一个检查。

关于java - 如何使用Jsoup解析给定选择范围内的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19838423/

相关文章:

Java 8 | HashMap 的并行流

java - 如何通过链接发送参数到java web服务以及如何在java中获取它

c# - 解析测量单位

javascript - 如何在 Javascript 中解析以下 JSON?

java - Antlr - 输入不匹配错误 - token 无法识别

java - JSOUP 自动登录网站

java - 如何通过jsoup在数据库中存储提取的元素

java - 客户端/服务器程序在初始化 KeyManagerFactoryImpl 时出错

java - 如何在电话身份验证期间检查用户是否已存在于 firebase 中

Java jsoup 链接忽略