我正在使用jsoup进行一些xml处理。问题是,它正在用html实体替换xml实体,即:»
:»
我怎样才能保留原始(xml)实体?
Groovy脚本:
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.Entities
import org.jsoup.parser.Parser
String HTML_STRING = '''
<html>
<div></div>
<div>Some text »</div>
</html>
'''
Document doc = Jsoup.parse(new ByteArrayInputStream(HTML_STRING.getBytes("UTF-8")), "UTF-8", "", Parser.xmlParser())
doc.outputSettings().charset("UTF-8")
doc.outputSettings().escapeMode(Entities.EscapeMode.base)
println doc.toString()
结果:
<html>
<div></div>
<div>
Some text »
</div>
</html>
如果我使用 Entities.EscapeMode.xhtml
,结果为:
<html>
<div></div>
<div>
Some text »
</div>
</html>
感谢。
答案 0 :(得分:0)
您希望使用EscapeMode.xhtml
的组合(如果使用XML解析器,则为默认值,而不是HTML解析器)和ascii
作为输出字符集。
默认输出字符集是UTF-8,如果输出字符集直接支持字符,jsoup将优先不使用实体转义(因为为什么浪费CPU和带有不必要的转义)。
如果您使用Document.OutputSettings.charset("ascii")
将输出字符集更改为ascii
,您将获得所需的输出。
如果您正在使用HTML,您可能还希望将输出语法设置为XML,否则HTML解析器将尝试使输出确认为HTML并且可以使您的XML DOM树变得简单。
(来源:jsoup的作者)