java如何在Jsoup中关闭关闭标记的自动生成?
我在尝试解析HTML文档时遇到了以下场景。在下面的代码中,我将内容以字符串的形式放置。在这种情况下,锚定标记中有一个P标记。如果使用Jsoup解析,它会添加一个额外的</a>;标记和<;a>;在接近#item1之间添加标记,更改html结构
public class Test{
public static void main(String[] args) {
String html="<A HREF=\"#Item1\">\n"
+ "<p style=\"font-family:times;margin-top:12pt;margin-left:0pt;\">\n"
+ "<FONT SIZE=2>Item 1.</FONT>\n"
+ "</A>";
Document doc = Jsoup.parse(html);
System.out.println("UNPARSED = \n"+html);
System.out.println("JSOUP PARSED = \n"+doc.toString());
}
}
输出
UNPARSED =
<A HREF="#Item1">
<p style="font-family:times;margin-top:12pt;margin-left:0pt;">
<FONT SIZE=2>Item 1.</FONT>
</A>
JSOUP PARSED =
<html>
<head></head>
<body>
<a href="#Item1"> </a>
<p style="font-family:times;margin-top:12pt;margin-left:0pt;"><a> <font size="2">Item 1.</font> </a></p>
</body>
</html>
是否有任何方法可以避免使用Jsoup自动完成标记。 多谢各位
# 1 楼答案
更新
如图How to prevent tags replacement?
这个问题有一个很好的解决方案:
解析时使用:
将提供:
谢谢@user2784201
旧的回应:
我不确定你所要求的是可能的还是不可能的,但我认为这违背了JSoup的理念,即以尽可能类似于浏览器的方式解析html
请注意,浏览器也会关闭该标记。我认为这是因为在HTML4中,在a中加入P是被禁止的。看看这个https://stackoverflow.com/a/1828032/3324704
顺便说一句,我认为您使用的是旧版本的JSoup,如果您使用1.8.1,您将看到内部的A标记(JSoup放在那里的伪标记,也是由浏览器放的)将覆盖href。这一事实可能会帮助你进行语法分析。参见JSOUP1.8.1的输出(注意内部
<a href="#Item1">
):此外,我还尝试了其他库。Htmlcleaner(here)触发一个错误(a-UnpermittedChild),并给出非常类似的输出:
和jtidy(here)说:
并给出:
也许你可以使用一个普通的XML解析器
抱歉,我的回答冗长且不令人满意:(