- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在尝试解析 HTML 文档时遇到了以下情况。我把内容以字符串的形式放到了下面的代码中。在此, anchor 标记内有一个 P 标记。如果使用 Jsoup 解析,它会在 #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 自动完成标签。谢谢。
最佳答案
--更新!!
这个问题有一个很好的解决方案:
解析:
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 。
顺便说一句,我认为您使用的是旧版本的 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 - UnpermissedChild) 并给出非常相似的输出:
<?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 解析器...
抱歉,内容冗长,回复不令人满意:(
关于java - 如何在Jsoup中关闭自动生成关闭标签</tagName>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27040626/
是否有内置函数(我知道我可以轻松创建一个)来创建简单的标签: MakeTag("Tag","myvalue") 会生成: myvalue 我宁愿使用比 XML 类更简单的东西,我所需要的只是一个像这样
我在尝试解析 HTML 文档时遇到了以下情况。我把内容以字符串的形式放到了下面的代码中。在此, anchor 标记内有一个 P 标记。如果使用 Jsoup 解析,它会在 #item1 附近添加额外的
if (((document.activeElement).parentNode).tagName == "div") { //do amazing things } 出于某种原因,我的某个特定
基本上我试图提取一些不同的 css 选择器的最后一个标签名称。 我已经在 javascript 中成功地实现了我正在谈论的内容,我正在寻找一种更紧凑的方式,最好只使用一个正则表达式。 这是我成功完成的
我在一些元素上运行一个循环,并尝试使用我在循环中获得的 id 访问另一组元素我尝试引用其他元素并获取它们的标签,这是我的代码。 function checkRequired(){ var i
我想创建一个函数来达到以下效果: function supportsElem(tagName) { // returns boolean } 哪里: supportsElem("div") //
我需要读取文件并查找并替换同一文件中的某些文本,而无需关闭阅读器。 建议任何简单的方法... 我正在读取文件,如下所示。我怎样才能将它写入同一个文件。 private static void read
我需要从我点击文档的任何元素中获取 $('this') 信息。 我尝试了以下代码: $('body').click(function(){ var element = this.tagName
我正在尝试从网站上提取一些数据,但由于我是网络抓取的新手,因此在标签名称、类代码和 ID 中感到困惑。我对此只有基本知识。 我想复制下面的数据,如果数据不存在,那么单元格应该留空,代码需要移入下一个值
我正在尝试根据条件切换 Backbone View 的 tagName。 我最初认为我可以设置一个默认的 tagName 为 'div'(我意识到这是默认的),然后在 View 的初始化函数中,检查条
我正在编写一个 iPhone 应用程序,它使用一点 JavaScript 代码来获取 UIWebView 上某个点的元素。 我有一点 iPhone 经验,但没有 javascript 经验,我在教程上
对于以下代码,element.tagName 未定义。 $('#page1').bind('pageinit', function(event) { $('form').validate({
Example Fiddle 。 我需要添加条件,以便我的代码支持输入(需要 1 个按钮生成整个 Json)。 我尝试过过滤: elements.tagName 但它给了我一个未定义的,我想这是因为
这个问题已经有答案了: How to fix error: The markup in the document following the root element must be well-for
原始问题 是否有一个 jQuery 方法可以检查选择类型并适本地设置值?例如,使用 .html() 或 .val()。 我已经制定了自己的方法来为我完成这项工作,但不确定这是否是执行此任务的最佳方法。
我有这个 jQuery 代码: $('*').mouseover(function() { $('#log').text($(this)[0].tagName);
我有我的html Hello @samplename This is my comment ... ... More .comment-details elements 在页面加载时,我想在 .com
我在 javascrip 中有一个小型模板系统,用户可以在其中以 $tagname$ 的形式放置标签。我可以将所有标签与模式匹配:/\$\w+\$/。 此外,我想专门匹配不完整的标签(它将以 $ 开头
.tagName 属性是否适用于直接元素?我一直在使用子元素作为起点让它工作,但我无法让它在直接元素上工作。 这是一个有效的例子: HTML This is paragraph 1. This is
我有以下 HTML 片段: Jill Martin rescues Savannah Guthrie from her guest
我是一名优秀的程序员,十分优秀!