2009-09-11 15 views
8

Sıfırdan oluşturulmuş bir DOM Belge var ve onu bir çıkış akışına serileştirmem gerekiyor.DOM düzey 3 seri hale getirme API'sı ile DOCTYPE bildirimi nasıl üretilir?

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); 

Ben sonuçlanan belgenin kamu ve sistem tanımlayıcıları hem bir DOCTYPE bildirimi içine olmalı, ama bir yolunu bulmak mümkün değildi: Aşağıdaki örnekte olduğu gibi, DOM düzey 3 seri API kullanıyorum onu üret.

Nasıl yapabilirim?

cevap

13

DOMImplementation'u kullanarak DocumentType düğümünü oluşturabilirsiniz.

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)); 

Sonuç:

<?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/> 
+0

Nasıl UTF-8'e kodlamasını değiştirmek için? –

+1

@VishnuPrasadKallummel [bu yanıt] 'da [LSOutput]' un (http://docs.oracle.com/javase/8/docs/api/org/w3c/dom/ls/LSOutput.html) kullanımına bakın (http://stackoverflow.com/a/28546725/304). – McDowell