XML 实体在 DOM 中被抽象出来。内容使用 String 公开,无需担心编码——在大多数情况下,这正是您想要的。
但是 SAX 对如何处理实体有一些支持。您可以尝试XMLReader
使用自定义创建 a EntityResolver#resolveEntity
,并将其作为参数传递给SAXReader
. 但我觉得它可能行不通:
Parser 将在打开除顶级文档实体之外的任何外部实体(包括外部 DTD 子集、DTD 内引用的外部实体和文档元素内引用的外部实体)之前调用此方法
否则,您可以尝试LexicalHandler
为 SAX 配置一个在遇到实体时收到通知的方式。JavadocLexicalHandler#startEntity
说:
报告一些内部和外部 XML 实体的开始。
您将无法更改解析,但这可能仍然有帮助。
编辑
您必须使用dom4j 提供的SAXReader
和读写 XML 。XMLWriter
请参阅读取 XML 文件和写入 XML 文件。不要asXml()
自己使用和转储文件。
FileOutputStream fos = new FileOutputStream("simple.xml");
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(fos, format);
writer.write(doc);
writer.flush();