6

Java で DOM を使用して XML ドキュメントを作成しました。Doctype を追加できません。このようなDoctypeが欲しいです。

<!DOCTYPE IndInfo PUBLIC "EDAFileSomething" "EDAFileSomething_2_0.dtd">

これがドキュメント作成コードです。

DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
Document doc = docBuilder.newDocument();

これが Transformer オブジェクト コードです。

TransformerFactory transformerFactory = TransformerFactory.newInstance();
            Transformer transformer = null;
            try {
                transformer = transformerFactory.newTransformer();
            } catch (TransformerConfigurationException ex) {
                Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
            }
            DOMSource source = new DOMSource(doc);
            try {

                StreamResult result = new StreamResult(System.out);
                transformer.transform(source, result);
            } catch (TransformerException ex) {
                Logger.getLogger(Reader.class.getName()).log(Level.SEVERE, null, ex);
            }

            System.out.println("File saved!");
4

2 に答える 2

15

DOM を使用して Doctype を構築し、Doctype を出力プロパティとして設定できます。

TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
transformer.setOutputProperty(OutputKeys.METHOD, "xml");
DOMImplementation domImpl = document.getImplementation();
DocumentType doctype = domImpl.createDocumentType("doctype",
    "-//Oberon//YOUR PUBLIC DOCTYPE//EN",
    "YOURDTD.dtd");
transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, doctype.getPublicId());
transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, doctype.getSystemId());
DOMSource source = new DOMSource(document);
StreamResult result = new StreamResult(new File(database));
transformer.transform(source, result);
于 2014-05-15T20:54:01.717 に答える
1

でメソッドDOMImplementationを呼び出してのインスタンスを取得した場合、 そのメソッドを使用して、指定された doctype で新しい を作成できます。getDOMImplementation()DocumentBuildercreateDocumentDocument

オブジェクトcreateDocumentTypeを作成するメソッドもありますDocumentType

http://docs.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/DOMImplementation.htmlおよびhttp://docs.oracle.com/javase/1.5.0/docs/を参照してください。詳細については、 api/javax/xml/parsers/DocumentBuilder.html を参照してください。

于 2012-11-25T19:16:23.127 に答える