Come può produrre una dichiarazione DOCTYPE con l'API di serializzazione di livello DOM 3?
-
05-07-2019 - |
Domanda
Ho un documento DOM creato da zero e devo serializzarlo su un flusso di output. Sto usando l'API di serializzazione di livello DOM 3, come nell'esempio seguente:
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);
Devo avere all'interno del documento risultante una dichiarazione DOCTYPE con identificatori sia pubblici che di sistema, ma non sono stato in grado di trovare un modo per produrlo.
Come posso fare?
Soluzione
Puoi creare un nodo DocumentType
usando il 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));
Risultato:
<?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/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow