gpt4 book ai didi

html - Jsoup - 如何判断 HTML 字符串是完整页面还是片段?

转载 作者:行者123 更新时间:2023-11-28 01:08:21 27 4
gpt4 key购买 nike

我找不到一种方法可以判断字符串输入是完整的 HTML 页面还是只是一个片段(没有 <html><body> ... </body></html> )。我查看了 jsoup 实现并找到了 parse 和 parseBodyFragment 的实现,但没有找到根据字符串决定使用哪一个的方法。

一个完整的 HTML 示例(需要正常解析):

<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
</body>
</html>

一个 HTML 片段的例子(需要 parseBodyFragment):

<div style=\"color:#0000FF\"> 
<h3>This is a heading</h3>
<p>This is a paragraph.</p>
</div>

最佳答案

Jsoup.parse将查找 head 和 body 元素并将它们正确嵌套在 html 标记中。 Jsoup.parseBodyFragment会将所有内容放在 body 标签中。无论哪种方式,都会创建一个完整的 HTML 文档。如果您不确定您的输入是完整的还是片段的,请使用解析。

考虑这个带有 head 元素的片段。

    <title>my title</title>
<div style="color:#0000FF">
<h3>This is a heading</h3>
<p>This is a paragraph.</p>
</div>

使用解析

    System.out.println(Jsoup.parse(fragment).html());

输出:

<html>
<head>
<title>my title</title>
</head>
<body>
<div style="color:#0000FF">
<h3>This is a heading</h3>
<p>This is a paragraph.</p>
</div>
</body>
</html>

注意正确嵌套的 <title><head> .


使用 parseBodyFragment

    System.out.println(Jsoup.parseBodyFragment(fragment).html());

输出

<html>
<head></head>
<body>
<title>my title</title>
<div style="color:#0000FF">
<h3>This is a heading</h3>
<p>This is a paragraph.</p>
</div>
</body>
</html>

注意嵌套不当的 <title><body> .


My question is how to recognize if my input is a fragment or not. Not what parse and parseBodyFragment methods do. Because if I have a fragment, I want to parse it without adding body tags (leave it as is).

Jsoup 会将内容规范化为 HTML 文档。但是,您可以使用 JRE 中的 W3C dom 和 javax.xml.parsers。您可以检查第一个节点是否为 HTML。

import javax.swing.text.html.HTML.Tag;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

...

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(myInputStream);
Node root = doc.getFirstChild();
boolean isFragment = !root.getNodeName().equals(Tag.HTML.toString());

关于html - Jsoup - 如何判断 HTML 字符串是完整页面还是片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38741025/

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