2016-06-14 8 views
2

内部DTD宣言を使用してJDOMでXMLを作成する必要があります。今では 私は外部のDTDとそれを作成し、これをコードです:JDOM - 内部DTD宣言でXMLを作成するにはどうすればいいですか?

public static void makeFile(Element rootElement, String pathDtd){ 

    Document documento = new Document(); 
    DocType type = new DocType(rootElement.getName(), pathDtd); 
    documento.setDocType(type); 
    documento.setRootElement(rootElement); 

    XMLOutputter xmlOutputter = new XMLOutputter(); 
    xmlOutputter.setFormat(Format.getPrettyFormat()); 
    /* Validazione xml ottenuto */ 
    String xmlOttenuto = xmlOutputter.outputString(documento); 
    SAXBuilder builder = new SAXBuilder(XMLReaders.DTDVALIDATING); 

    try { 
     Document documentoCorretto = builder.build(new StringReader(xmlOttenuto)); 
     FileOutputStream fileOutputStream = new FileOutputStream(new File(rootElement.getName()+".xml")); 
     xmlOutputter.output(documentoCorretto, fileOutputStream); 
    } catch (FileNotFoundException e1){ 
     System.err.println(e1); 
    } catch(IOException e2){ 
     System.err.println(e2); 
    } catch (JDOMException e) { 
     e.printStackTrace(); 
    } 
} 

答えて

0

DocType構造体は、外部と内部の両方の参照を含むことができます。 DoctypeにsetInternalSubset()を呼び出すことで、内部サブセットを追加できます。入力値は、完全な宣言を表す文字列でなければなりません。 JDOMはdoctypeの内部 'モデル'を実行しません - それは "blob"として扱われます。あなたはコンストラクタDocType(String)

+0

それが唯一の書き込みを行う。この方法を使用して外部参照することなくDOCTYPEを作成することができます

注:完全なDTD宣言のない「<!DOCTYPEのrootElement>」。私はそれが完全なdtdを書くようにしたいのですが?このよう –

+0

:!!!!<?xmlのバージョン= "1.0" スタンドアロン= "はい"> ]> <チュートリアルタイプ= "ウェブ"> XMLチュートリアル ます。http:!!/ /www.quackit.com/xml/tutorial HTMLチュートリアル http://www.quackit.com/html/tutorial

+0

は、次に 'type.setInternalSubset(" <!ELEMENTのチュートリアル(チュートリアル)+><!ELEMENTチュートリアル(名前、URL)を呼び出します><!ELEMENT name(#PCDATA)><!ELEMENT url(#PCDATA)><!ATTLISTチュートリアルタイプCDATA #REQUIRED> ")' – rolfl

関連する問題