如何使用DOM在XML文档中添加doctype。

6
我已经使用Java中的DOM创建了一个XML文档。我无法添加doctype。我想要以下doctype。
<!DOCTYPE IndInfo PUBLIC "EDAFileSomething" "EDAFileSomething_2_0.dtd">

以下是文件创建代码。

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();

这里是Transformer对象代码。
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = null;
try {
    transformer = transformerFactory.newTransformer();
} catch (TransformerConfigurationException ex) {
    Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
}
DOMSource source = new DOMSource(doc);
try {

    StreamResult result = new StreamResult(System.out);
    transformer.transform(source, result);
} catch (TransformerException ex) {
    Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
}

System.out.println("File saved!");
2个回答

16
您可以使用DOM构建doctype,并将doctype设置为输出属性。
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
DOMImplementation domImpl = document.getImplementation();
DocumentType doctype = domImpl.createDocumentType("doctype",
    "-//Oberon//YOUR PUBLIC DOCTYPE//EN",
    "YOURDTD.dtd");
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId());
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId());
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(database));
transformer.transform(source, result);

文档的版本和包是什么?我的版本中没有getImplementation()。 - k-den
getImplementation() 是用于 DocumentBuilder 对象 docBuilder 的。 - SGodoy
非常有用的信息,但是创建DocumentType对象的单独步骤有什么意义呢?如果您只是设置Transformer的输出属性,那么不能直接跳过该步骤并直接设置字符串吗?在您的示例中似乎实际的DocumentType实例是不需要的。 - Garret Wilson

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接