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 を使用して空の doctype を出力することはできますか?