我正在尝试使用Java 中的 W3C DOM API读取 XML 文档并将其输出到新的 XML 文档中。为了处理 DOCTYPE,我使用以下代码(从输入 Documentdoc
到目标 File target
):
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no"); // omit '<?xml version="1.0"?>'
trans.setOutputProperty(OutputKeys.INDENT, "yes");
// if a doctype was set, it needs to persist
if (doc.getDoctype() != null) {
DocumentType doctype = doc.getDoctype();
trans.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId());
trans.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId());
}
FileWriter sw = new FileWriter(target);
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
这对带有和不带有 DOCTYPE 的 XML 文档都适用。但是,我现在NullPointerException
在尝试转换以下输入 XML 文档时遇到了一个问题:
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE permissions >
<permissions>
// ...
</permissions>
HTML 5 对其 DOCTYPE 使用类似的语法,并且它是有效的. 但我不知道如何使用 W3C DOM API 来处理这个问题——试图将其设置DOCTYPE_SYSTEM
为null
抛出异常。我还可以使用 W3C DOM API 来输出一个空的文档类型吗?