我使用Jsoup,并且我需要以ascii编码获取html文档中所有标记的属性值,保持它们的原样,而不转换它们。
因此,我有以下html文档
<!DOCTYPE html>
<head>
<meta charset="ascii">
</head>
<body>
<div title="2 > 1, 1 > 0, à vs è">
3 > 2, 1 > 0
</div>
</body>我想通过Jsoup来解析它。
我需要准确地提取title属性的值:2 > 1, 1 > 0, à vs è。
我创建了一个Document对象doc,如下所示(它是用Kotlin编写的,但我认为它在这里并不重要):
val charset = Charset.forName("ascii")
val doc = Jsoup.parse(File("test.html").readText(charset))
doc.outputSettings().charset(charset)当我通过以下方式打印文档时
println(doc.toString())我得到了以下字符串
<!doctype html>
<html>
<head>
<meta charset="ascii">
</head>
<body>
<div title="2 > 1, 1 > 0, à vs è">
3 > 2
</div>
</body>
</html>它与文件内容的不同之处在于title属性值(>在字符串"2 > 1"中转换为> ),而文档的其余部分是OK的。
然后,检查属性值
doc.body().select("div").forEach { div -> println("title = ${div.attr("title")}") }生成以下字符串
title = 2 > 1, 1 > 0, à vs è注意,à和è被转换为à和è。
我的问题是:在Jsoup中,如何获得html标记的属性值,而不改变它们在输入文件中的编写方式?
在上面的示例中,我需要获取字符串"2 > 1, 1 > 0, à vs è" (因为它写在输入文件中),而不是"2 > 1, 1 > 0, à vs è" niether "2 > 1, 1 > 0, à vs è"。
发布于 2016-11-18 02:33:35
attr()方法返回一个没有HTML实体的字符串,而我找不到保留HTML实体的方法。但是,您可以使用Jsoup.clean()方法将字符串中的字符转换为实体。
val charset = Charset.forName("ascii")
val doc = Jsoup.parse(File("test.html").readText(charset))
doc.body().select("div").forEach { div ->
val title = Jsoup.clean("${div.attr("title")}", "", Whitelist.none(), Document.OutputSettings().charset(charset))
println("title = $title")
}结果是:
title = 2 > 1, à vs è当然,对于您的用例来说,这可能不是一个好的解决方案。
https://stackoverflow.com/questions/40659946
复制相似问题