gpt4 book ai didi

java - 使用 jsoup 或正则表达式在 header 标签之间提取 html 标签

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

您好,我有一个 html 文件解析的场景。我正在使用 jsoup 解析 html 文件,解析后我想提取标题标签(h1、h3、h4)。我使用了 doc.select() 但它只会返回 header 标签值,但我的要求是我应该在 h1 到 h3 或 h4 之间提取标签,反之亦然。

<h4>SECTION 2</h4>
<p>some thing h4.....</p>
<p>some thing h4.....</p>
<p>some thing h4.....</p>
<h3>lawsuit</h3>
<p>some thing h3.....</p>
<p>some thing h3.....</p>
<p>some thing h3.....</p>
<h1>header one </h1>

所以这里先查找html字符串中是否包含H1,H3,H4。这里我们有 h4 所以包括 h4 它应该搜索下一个 h1 或 h3,直到 h3 我们提取字符串并将其放在一个单独的 html 文件中。

第一个html文件包含

<h4>SECTION 2</h4>
<p>some thing h4.....</p>
<p>some thing h4.....</p>
<p>some thing h4.....</p>

第二个html文件包含

<h3>lawsuit</h3>
<p>some thing h3.....</p>
<p>some thing h3.....</p>
<p>some thing h3.....</p>

第三个html文件包含

<h1>header one </h1>
....
....
....

这里的 html 字符串是动态的,所以我想写一个正则表达式来实现这个上下文,因为我是 java 的新手,我不知道如何实现这个。现在我使用了子字符串,但我需要一个通用的方法,要么是正则表达式,要么是 jsoup 本身。

我试过的代码是。

try {
File sourceFile = new File("E://data1.html");
org.jsoup.nodes.Document doc = Jsoup.parse(sourceFile, "UTF-8");
org.jsoup.nodes.Element elements = doc.body();
String elementString = StringUtils.substringBetween(elements.toString(),"<h4>", "<h3>");
System.out.println("elementString::"+elementString);
File destinationFile = new File("E://sample.html");
BufferedWriter htmlWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destinationFile), "UTF-8"));
htmlWriter.write(elementString);
htmlWriter.close();
System.out.println("Completed!!!");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

请帮助我实现这一目标。

最佳答案

请不要使用正则表达式从 Xml 或 HTML 文档中提取元素。正则表达式对大型文档有限制。

改用 XPath 来查询文档。例如,尝试查看 this计算器问题。您可以使用管道运算符 |在 OR 中有多个条件。

类似于此的东西应该可以工作:

//h1/following-sibling::p |
//h2/following-sibling::p |
//h3/following-sibling::p |
...

关于java - 使用 jsoup 或正则表达式在 header 标签之间提取 html 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29889638/

25 4 0