当前位置: 首页 > 知识库问答 >
问题:

使用JAVA解析html

阳英朗
2023-03-14

我在使用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”标记)?

共有2个答案

能向晨
2023-03-14
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("-----------------------");
    }
}
朱通
2023-03-14

在这里,您可以通过读取每个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实现 让我们从实现开始。 你首先必须