gpt4 book ai didi

java - 如何在Java中获取HTML标签的开始和结束位置?

转载 作者:太空宇宙 更新时间:2023-11-04 12:36:55 24 4
gpt4 key购买 nike

在我的 Java 应用程序中,我需要分析 HTML。到目前为止,我一直在使用 JSoup,而且效果非常好。但现在,我需要从 HTML 字符串中获取清理后的文本,此外还需要获取已删除标签的位置。例如,如果我有

Some HTML <b id="boldtext">text</b>

所需的输出是

Some HTML text

以及信息,从位置 10 到 14 有一个 b 标签(我需要标签的位置,就好像那里没有标签一样),并且标签的 id 为“boldtext”。

(我希望我能弄清楚我需要什么,我不太擅长解释 - 它类似于 this 问题,除了我还需要找到的标签的属性,并且它是 Java,而不是 Python)

我想使用 JSoup 来做到这一点,但没有找到一种方法来做到这一点(如果有,请告诉我!)。实现我自己的算法也效果不佳,难以理解并且导致了很多错误。那么,获取所需信息的好方法是什么?有没有办法使用 JSoup 来做到这一点?我需要一个不同的库吗?任何帮助表示赞赏!

**编辑:**我会尝试更清楚地说明我需要什么。在上面的示例中,我需要 HTML 干净的文本以及剩余文本的哪一部分是粗体的信息。我需要开始和结束位置,但 HTML 标记稍后会被删除,因此在搜索正确位置时不能将它们计算在内。

完美的输出将是一个对象列表,其中每个对象包含有关一个标签的信息(我所说的标签是指属于在一起的开始和结束标签):标签类型(例如“b”、“quote”等)、标签内容(没有 HTML)、属性以及标签的开始和结束位置。同样,当我从标签中删除标签时,位置需要保持有效!清理标签后,应用程序仍然需要知道“文本”是粗体,而不是在删除标签之前,结束标签的开头位于 31,因为删除标签时,正确的结束位置向左移动了 17 个字符。

最佳答案

您可以使用正则表达式来查找并替换所有带有空字符串的 HTML 标记。正则表达式匹配器还可以返回匹配组的索引。

import java.util.regex.Matcher;

导入java.util.regex.Pattern;

/** * */

/** * @作者用户 * */公共(public)类 HTMLProcessor {

private Pattern pattern;
private Matcher matcher;

private static final String HTML_PATTERN = "<(\"[^\"]*\"|'[^']*'|[^'\">])*>";
/**
*
*/
public HTMLProcessor() {
pattern = Pattern.compile(HTML_PATTERN);
}

public String Process(String htmlString) {
matcher = pattern.matcher(htmlString);
if (matcher.find()) {
do {
System.out.println("Start:" + matcher.start() + ", end:" + matcher.end());
} while(matcher.find());

return htmlString.replaceAll(HTML_PATTERN, "");
}
return htmlString;
}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
HTMLProcessor processor = new HTMLProcessor();
String output = processor.Process("Some HTML <b id=\"boldtext\">text</b>");
System.out.println(output);
}

}

****编辑****要完成您的要求,JSoup 绝对是正确的方法。但看起来我必须根据您的要求设置整个项目。在这个答案的范围内,我只能给你一些伪代码。

public String processWithJSoup() {
String html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc = Jsoup.parse(html);

Elements tags = doc.getAllElements();
String cleanText = doc.text();

System.out.println(cleanText);

for (Element tag : tags) {
// get node's text
String nodeText = tag.text();

// find node's text position in the cleanText for start and end pos

// get attributes of node

// create a object to hold the above information

// push object into an array
}

return "";
}

关于java - 如何在Java中获取HTML标签的开始和结束位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37235885/

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