ASi

で DOM で xml/html 生成

javax.xml.parsers.DocumentBuilderFactory をエントリポイントとして Dom document を構築し、javax.xml.transform.TransformerFactory をエントリポイントとして Transformer を取得し、document を DomSource に wrap して transform して文字列化する。


いやーまどろっこしいと言うか、API reference だけからでは到底たどり着かんわ…


最初 org.w3c.dom.bootstrap.DOMImplementationRegistry から始めて Dom document を取り出そうとしていたが、エラーになった。

        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = null;
        try {
            db = dbf.newDocumentBuilder();
        } catch (ParserConfigurationException e1) {
            e1.printStackTrace();
        }
        Document doc = db.newDocument();

        Element html = doc.createElement("html");
        doc.appendChild(html);
        Element body = doc.createElement("body");
        html.appendChild(body);
        
        Text text = doc.createTextNode("JAN test");
        body.appendChild(text);

        // 文字列化
        TransformerFactory tf = TransformerFactory.newInstance();
        Transformer transformer = null;
        try {
            transformer = tf.newTransformer();
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        }
        transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
        transformer.setOutputProperty(OutputKeys.METHOD, "html");
        
        // output
        PrintWriter writer = response.getWriter();
        StreamResult result = new StreamResult(writer);
        DOMSource source = new DOMSource(doc);
        try {
            transformer.transform(source, result);
        } catch (TransformerException e) {
            e.printStackTrace();
        }
        
        writer.flush();