Comment produire une déclaration DOCTYPE avec une API de sérialisation DOM niveau 3?
-
05-07-2019 - |
Question
J'ai créé un document DOM à partir de rien et je dois le sérialiser dans un flux de sortie. J'utilise une API de sérialisation DOM niveau 3, comme dans l'exemple suivant:
OutputStream out;
Document doc;
DOMImplementationLS domImplementation =
(DOMImplementationLS) DocumentBuilderFactory.newInstance().newDocumentBuilder().getDOMImplementation();
LSSerializer lsSerializer = domImplementation.createLSSerializer();
LSOutput lsOutput = domImplementation.createLSOutput();
lsOutput.setByteStream(out);
lsSerializer.write(doc, lsOutput);
Je dois inclure dans le document résultant une déclaration DOCTYPE comportant à la fois des identifiants public et système, mais je n'ai pas pu trouver le moyen de la produire.
Comment puis-je faire?
La solution
Vous pouvez créer un noeud DocumentType
à l'aide de DOMImplementation .
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
// create doc
Document doc = docBuilder.newDocument();
DOMImplementation domImpl = doc.getImplementation();
DocumentType doctype = domImpl.createDocumentType("web-app",
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN",
"http://java.sun.com/dtd/web-app_2_3.dtd");
doc.appendChild(doctype);
doc.appendChild(doc.createElement("web-app"));
// emit
System.out.println(((DOMImplementationLS) domImpl).createLSSerializer()
.writeToString(doc));
Résultat:
<?xml version="1.0" encoding="UTF-16"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow