我试图解析HTML文档,我遇到了以下场景。我已在以下代码中以字符串的形式放置内容。在此,锚标签内部有一个P标签。如果用Jsoup解析,它会增加一个额外的< / 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完成自动标记。 谢谢。
答案 0 :(得分:1)
- 更新!!
如How to prevent tags replacement?
所示这个问题有一个很好的解决方案:
解析:
Document doc = Jsoup.parse(html, "", Parser.xmlParser());
会给:
<a href="#Item1"> <p style="font-family:times;margin-top:12pt;margin-left:0pt;"> <font size="2">Item 1.</font> </p></a>
谢谢@ user2784201!
- 旧回应:
我不确定你要求的是否可能,但我认为这与JSoup解析html的理念不同,它的方式与浏览器的方式尽可能相似。
请注意,浏览器也会关闭该A标记。我认为这是因为在HTML4中将P放入A中是被禁止的。看看这个https://stackoverflow.com/a/1828032/3324704。
Bytheway我认为你使用的是旧版本的JSoup,如果使用1.8.1,你会看到内部A标签(由JSoup放置的虚假标签,也是浏览器)将保留href。这个事实可以帮助您解析。请参阅JSoup 1.8.1的输出(注意内部<a href="#Item1">
):
JSOUP PARSED =
<!DOCTYPE html>
<html>
<head></head>
<body>
<a href="#Item1"> </a>
<p style="font-family:times;margin-top:12pt;margin-left:0pt;"><a href="#Item1"> <font size="2">Item 1.</font> </a></p>
</body>
</html>
此外,我尝试过其他库。 Htmlcleaner(here)触发错误(a - UnpermittedChild)并提供非常相似的输出:
<?xml version="1.0" encoding="UTF-8"?>
<html>
<head></head>
<body><a href="#Item1">
</a><p style="font-family:times;margin-top:12pt;margin-left:0pt;"><a href="#Item1">
<font size="2">Item 1.</font>
</a></p></body></html>
jtidy(here)说:
Warning: missing </a> before <p>
并给出:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator"
content="HTML Tidy for Java (vers. 2009-12-01), see jtidy.sourceforge.net" />
<title></title>
</head>
<body>
<a href="#Item1"></a>
<p style="font-family:times;margin-top:12pt;margin-left:0pt;"><font
size="2">Item 1.</font> </p>
</body>
</html>
也许你可以使用常规的XML解析器......
对于详细程度和不满意的回复表示抱歉:(