我在使用jsoup(Java)解析html文档时遇到了一个问题。我正在分析的HTML具有以下格式:
.....
<hr>
<a name="N1"> </a> Text 1<br>
<hr>
<a name="N2"> </a> Text 2<br>
<hr>
<a name="N3"> </a>Text 3<br>
<hr>
<a name="N4"> </a>
<DIV style="margin-left: 36px">
<div></div>
<img src=bullet.gif alt="Bullet point"> Text
</DIV><br>
<hr>
<a name="X5"> </a>
<DIV style="margin-left: 36px">
<div></div>
<img src=bullet.gif alt="Bullet point"> Text
</DIV><br>
<hr>
...
我想在两个“hr”标记之间隔离HTML文本。我正在尝试以下代码:
File input = new File("C:\\Users\\page.html");
Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");
Elements body = doc.select("body");
Elements hrs = body.select("hr");
ArrayList<String> objects = new ArrayList<String>();
for (Element hr : hrs) {
String textAfterHr = hr.nextSibling().toString();
objects.add(textAfterHr);
}
系统出来println(对象);
但是ArrayList没有包含我想要的内容,我不知道如何解决它。(我是否可以将“hr”标记转换为“hr”文本“/hr”标记)?
public static void main(String[] args) throws ParseException, IOException {
String html = ".....\n" +
"<hr>\n" +
" <a name=\"N1\"> </a> Text 1<br>\n" +
"<hr>\n" +
" <a name=\"N2\"> </a> Text 2<br>\n" +
"<hr>\n" +
" <a name=\"N3\"> </a>Text 3<br>\n" +
"<hr>\n" +
" <a name=\"N4\"> </a>\n" +
" <DIV style=\"margin-left: 36px\">\n" +
" <div></div>\n" +
" <img src=bullet.gif alt=\"Bullet point\"> Text\n" +
" </DIV><br>\n" +
"<hr>\n" +
" <a name=\"X5\"> </a>\n" +
" <DIV style=\"margin-left: 36px\">\n" +
" <div></div>\n" +
" <img src=bullet.gif alt=\"Bullet point\"> Text\n" +
" </DIV><br>\n" +
"<hr>\n" +
" ...";
//Split your html string at each hr tag and keep the delimiter
String [] splited = (html.split("(?=<hr>)"));
//join it back to a string using a closing hr tag
html = String.join("</hr>\n",splited);
//use the jsoup xmlParser
Document doc = Jsoup.parse(html,"",Parser.xmlParser());
Elements eles = doc.select("hr");
for(Element e : eles){
System.out.println(e.html());
System.out.println("-----------------------");
}
}
在这里,您可以通过读取每个hr标签的子项来获得结果。使用此选项可获得更好的解决方案。
ArrayList<String> objects = new ArrayList<String>();
Elements hrs = body.select("hr");
for(int i=0;i<hrs.size();i++){
Element hrElm=hrs.get(i);
Elements childrens=hrElm.children();
for(Element child: childrens){
String text=child.text();
objects.add(text);
}
}
问题内容: 我想解析一个简单的网站,并从该网站中抓取信息。 我曾经用DocumentBuilderFactory解析XML文件,但我尝试对html文件做同样的事情,但是它总是陷入无限循环。 有什么问题吗?还是有任何更简单的方法可以从网站中获取给定html标签的数据? 问题答案: 有一种更简单的方法可以做到这一点。我建议使用JSoup。使用JSoup,您可以执行以下操作 或者,如果您想要身体: 或者
问题内容: 我有下面的xml: Ι要解析此xml文件并从 ListofDocs 获取 主题ID 和 百分比 __ 第一种方法是从xml获取所有文档元素,然后检查祖父节点是否为ListofDocs。但是元素文档存在于 rankDocs 和 listOfDocs中 ,因此我有一个很大的列表。 所以我想知道是否存在更好的解决方案来解析此xml以避免if语句? 我的代码: 问题答案: 首先,在检查节点名称
问题内容: 我有下面的xml: Ι要解析此xml文件并从 ListofDocs 获取 主题ID 和 百分比 __ 第一种方法是从xml获取所有文档元素,然后检查祖父节点是否为ListofDocs。但是元素文档存在于 rankDocs 和 listOfDocs中 ,因此我有一个很大的列表。 所以我想知道是否存在更好的解决方案来解析此xml以避免if语句? 我的代码: 问题答案: 首先,在检查节点名称
问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax Implementation 让我
问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax实现 让我们从实现开始。 你首先必须