我使用Jsoup,我需要在ascii-encoding中获取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
attribite的值: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"
),而文档的其余部分则正常。
然后,检查属性值
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 è"
。
答案 0 :(得分:0)
attr()
方法返回没有HTML实体的String,我找不到保留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 è
当然,这对您的用例可能不是一个好的解决方案。