2

我正在使用 jsoup 进行一些 xml 处理。问题是,它正在替换 xml 实体,即:»用 html 实体:»

我怎样才能保留原始(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 &#187;</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 &raquo;
 </div> 
</html>

如果我使用Entities.EscapeMode.xhtml结果是:

<html> 
 <div></div> 
 <div>
  Some text »
 </div> 
</html>

谢谢。

4

1 回答 1

-1

您想使用EscapeMode.xhtml(如果您使用 XML 解析器,而不是 HTML 解析器,这是默认设置)和ascii作为输出字符集的组合。

默认的输出字符集是 UTF-8,如果输出字符集直接支持该字符,jsoup 将宁愿不使用实体转义(因为为什么用不必要的转义浪费 CPU 和带宽)。

如果将输出字符集更改为asciiusing Document.OutputSettings.charset("ascii"),您将获得所需的输出。

如果您使用 HTML,您可能还希望将输出语法设置为XML,否则 HTML 解析器将尝试使输出确认为 HTML,并且可以处理您的 XML DOM 树。

(来源:jsoup作者)

于 2016-10-24T02:33:26.097 回答