当前位置: 首页 > 面试题库 >

Jsoup:如何获取2个标题标签之间的所有html

佟颖逸
2023-03-14
问题内容

我正在尝试获取2 h1标签之间的所有html。实际的任务是根据h1(heading 1)标签将html分成几帧。

感谢任何帮助。

谢谢苏尼尔


问题答案:

如果要获取和处理两个连续h1标签之间的所有元素,则可以处理同级对象。这是一些示例代码:

public static void h1s() {
  String html = "<html>" +
  "<head></head>" +
  "<body>" +
  "  <h1>title 1</h1>" +
  "  <p>hello 1</p>" +
  "  <table>" +
  "    <tr>" +
  "      <td>hello</td>" +
  "      <td>world</td>" +
  "      <td>1</td>" +
  "    </tr>" +
  "  </table>" +
  "  <h1>title 2</h1>" +
  "  <p>hello 2</p>" +
  "  <table>" +
  "    <tr>" +
  "      <td>hello</td>" +
  "      <td>world</td>" +
  "      <td>2</td>" +
  "    </tr>" +
  "  </table>" +
  "  <h1>title 3</h1>" +
  "  <p>hello 3</p>" +
  "  <table>" +
  "    <tr>" +
  "      <td>hello</td>" +
  "      <td>world</td>" +
  "      <td>3</td>" +
  "    </tr>" +
  "  </table>" +    
  "</body>" +
  "</html>";
  Document doc = Jsoup.parse(html);
  Element firstH1 = doc.select("h1").first();
  Elements siblings = firstH1.siblingElements();
  List<Element> elementsBetween = new ArrayList<Element>();
  for (int i = 1; i < siblings.size(); i++) {
    Element sibling = siblings.get(i);
    if (! "h1".equals(sibling.tagName()))
      elementsBetween.add(sibling);
    else {
      processElementsBetween(elementsBetween);
      elementsBetween.clear();
    }
  }
  if (! elementsBetween.isEmpty())
    processElementsBetween(elementsBetween);
}

private static void processElementsBetween(
    List<Element> elementsBetween) {
  System.out.println("---");
  for (Element element : elementsBetween) {
    System.out.println(element);
  }
}


 类似资料:
  • 在像这样的网站上http://wikitravel.org/en/San_Francisco,诸如“Districts”、“Understand”、“Get in”等部分实际上并不包含HTML中的整个部分。节实际上只是标题中的跨类。正因为如此,我们不能简单地通过选择id来获取wiki文档的某些部分。 但是,是否可以收集两个标记之间的所有html?比如说我想要“四处走动”部分。我该如何发出一个选择器

  • 我正在尝试从网站获取一些数据。它看起来像这样 我只需要得到div标签中的时间值。这是我的Java代码。 它没有给出任何错误,但在日志上 "D/NetworkSecurityConfig:未指定网络安全配置,使用平台默认设置" 我看到也许这可以帮助你解决问题。提前感谢您,任何回应将不胜感激。

  • 我正在从事一个个人项目,希望解析这个html并从中检索信息。 基本上,我希望获得 标记中给出的所有信息,为此,我在java中使用JSOUP。 我使用这段代码来获取,但这是在一个段落中给出所有值。 我也试过了 但他的观点是空泛的。 有人能帮我以更好的方式获得这些数据吗?

  • 问题内容: 我想获取从开始标记到第一次出现标记之前的所有文本。这意味着,如果我举这个例子,那么我必须以字符串形式获取。 问题答案: 我会避免使用nextSibling,因为从您的问题开始,您想要包括直到next的所有内容,而不管它是在同级元素,父元素还是子元素中。 因此,我认为最好的方法是找到下一个元素的节点,然后递归循环,直到出现为止,然后添加遇到的每个字符串。如果您的HTML与示例大不相同,则

  • 我有以下html: 我尝试获取div元素的子元素,然后迭代子元素并将其转换为html,但这只返回标记元素,而忽略元素之间的文本。在理想情况下,文本将被p标记包围,但情况并非如此:S 如果我在div元素上使用element.ownText函数,那么我会得到没有标记的文本,我需要这两样东西,并且顺序正确:/ 谢谢

  • 我是xslt新手。我希望将以下输入转换为如下所示的输出: 输入: 输出应为: 我想要<代码> XSL代码: 我得到的输出为: