如果我理解正确,您只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
),但您可以为此添加另一个检查。