¿Cómo se puede producir una declaración DOCTYPE con la API de serialización DOM nivel 3?
-
05-07-2019 - |
Pregunta
Tengo un documento DOM creado desde cero y necesito serializarlo a una secuencia de salida. Estoy usando la API de serialización DOM nivel 3, como en el siguiente ejemplo:
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);
Necesito tener dentro del documento resultante una declaración DOCTYPE con identificadores tanto públicos como del sistema, pero no pude encontrar una manera de producirla.
¿Cómo puedo hacer?
Solución
Puede crear un nodo DocumentType
utilizando Implementación de DOM .
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));
Resultado:
<?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/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow