gpt4 book ai didi

java - 无法使用 Jsoup HTML 解析器 Java 实现某些功能

转载 作者:行者123 更新时间:2023-11-27 23:27:25 25 4
gpt4 key购买 nike

我无法使用 Jsoup Java 库为以下场景解析某些文本。

1:This is <b>My Text</b> some other <b> </b> text as well <b></b><b>non empty tag1</b> other text .

预期输出: some other <b> </b> text as well <b></b>

2:This is <b>My Text</b> some other <b> </b> text as well <b></b><b>non empty tag2</b> other text .

预期输出: some other <b> </b> text as well <b></b>

3:This is <b>My Text</b> some other <b> </b> text as well <b></b><b>non empty tag2</b> other text <b></b> <b>non empty tag3</b> .

预期输出: some other <b> </b> text as well <b></b>

在这里,如果您注意到文本 My Text 是固定的(静态的)但第二个非空(不要将空格视为值)B 标记值可能会有所不同。正则表达式应该能够提取 <b>My Text</b> 之间的文本并且第一次出现非空 <b>之后标记。

我正在使用 Jsoup 库,但无法实现上述预期输出。请确保解决方案对于每种情况都应该是通用的,因为在我的情况下它是动态的。

最佳答案

简单的解决方案看起来像

  • 找到<b>您感兴趣的元素(带有您要查找的文本的元素)
  • 遍历放置在它之后的 sibling 并打印它们直到找到非空 <b>

你只需要记住 Jsoup 使用的是 Node存储所有元素(包括不属于标签的文本),而 Element类(扩展 Node )可能只包含特定的标签。

例如像

这样的文本
before <b>bold</b> after<i>italic</i>

将表示为

<node>before </node>
<element tag="B">
<node>bold</node>
</element>
<node> after</node>
<element tag="I">
<node>italic</node>
</element>

例如,如果你 select("b") (它将找到 <element tab="B"> )并调用 nextElementSibling()它会把你带到<element tag="I"> .获取<node>after</node>你需要使用 nextSibling()这不会消除简单的文本节点。

Node 可能存在问题类是它不提供 text()可以生成当前节点的文本内容的方法(这可以让我们测试当前节点/元素是否有任何文本)。但没有什么能阻止我们类型转换 Node处理 Element 的标签它提供了这样的方法。

所以我们的解决方案可能是这样的:

public static String findFragment(String html, String fixedStart) {

Document doc = Jsoup.parse(html);
Element myBTag = doc
.select("b:matches(^" + Pattern.quote(fixedStart) + "$)")
.first();

StringBuilder sb = new StringBuilder();
boolean foundNonEmpty = false;

Node currentSibling = myBTag.nextSibling();
while (currentSibling != null && !foundNonEmpty) {
if (currentSibling.nodeName().equals("b")) {
Element b = (Element) currentSibling;
if (!b.text().trim().isEmpty())
foundNonEmpty = true;
}
sb.append(currentSibling.toString());
currentSibling = currentSibling.nextSibling();
}

return sb.toString();
}

关于java - 无法使用 Jsoup HTML 解析器 Java 实现某些功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37692739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com