Java 如何在Jsoup解析中避免周围的html头标记
我尝试使用Jsoup解析给定的html内容。在Jsoup.parse()之后,html输出将html、head和body标记附加到输入。我只想忽略这些 样本输入:Java 如何在Jsoup解析中避免周围的html头标记,java,html,parsing,jsoup,Java,Html,Parsing,Jsoup,我尝试使用Jsoup解析给定的html内容。在Jsoup.parse()之后,html输出将html、head和body标记附加到输入。我只想忽略这些 样本输入: <p><b>This <i>is</i></b> <i>my sentence</i> of text.</p> <html><head></head><body><p><
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
<html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body></html>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
******* HTML *******
<html>
<head></head>
<body>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body>
</html>
******* XML *******
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
实际输出:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
<html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body></html>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
******* HTML *******
<html>
<head></head>
<body>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body>
</html>
******* XML *******
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
这是我的文字句子
预期输出:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
<html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body></html>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
******* HTML *******
<html>
<head></head>
<body>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body>
</html>
******* XML *******
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
这是我的文字句子
请帮助。原因:
parseBodyFragment()
以及所有其他parse()
-默认情况下,方法使用HTML解析器。而那些总是添加HTML外壳(…
,…
等等)
解决方案:
只是不要使用HTML解析器,而是使用XML解析器
换掉那一行,你的问题就解决了
例子:
final String html=“这是我的文本句子。”;
Document docHtml=Jsoup.parse(html);
Document docXml=Jsoup.parse(html,“,Parser.xmlParser());
System.out.println(“*********HTML*********\n”+docHtml);
System.out.println();
System.out.println(“*******XML******\n”+docXml);
输出:
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
<html><head></head><body><p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body></html>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
******* HTML *******
<html>
<head></head>
<body>
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
</body>
</html>
******* XML *******
<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>
*******HTML*******
这是我的课文句子
*******XML*******
这是我的课文句子
要获得预期的输出,它实际上是:
final String html = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>";
Document doc = Jsoup.parseBodyFragment(html);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.body().html());
final String html=“这是我的文本句子。”;
Document doc=Jsoup.parseBodyFragment(html);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.body().html());
您可以尝试使用XML解析器,但这并不总是有效的,因为HTML并不总是XML;它通常有未终止的标记,如
和
。最好还是坚持使用HTML解析器。您可以依赖于有
、
和
标记,它们很容易丢弃。只需通过选择body标记获取HTML片段,并请求其HTML
Document doc = Jsoup.parseBodyFragment(html);
doc.outputSettings().prettyPrint(false);
System.out.println(doc.select("body").html());
您还可以将Jsoup.parse与HTML解析器一起使用。你所需要做的就是去掉
html
和body
包装
这可以通过选择主体
元素并展开它来完成:
String input = "<p><b>This <i>is</i></b> <i>my sentence</i> of text.</p>";
Node content = Jsoup.parse(input).body().unwrap();
System.out.println(content.html());
这应该对你有帮助@吉坦德拉:我想要这样的财产。这样做的一个潜在缺点是,您没有得到任何HTML整理—XML解析器不关心HTML5结构,而是让内容按原样通过。如果您想要整洁的正文HTML,请使用
Jsoup.parseBodyFragment(HTML.body()代码>这仅在html为xml时有效。不幸的是,如果您有像img标记这样的东西没有终止,xml解析器将假定以下标记在内部。UPPOWED用于警告xml解析器。我几乎做到了这一点,尽管我的jsoup用例是纠正图像。还想在body元素上添加comment.html(),它只是内部html。它不包括周围的主体标记。