解答例 - 実習課題2 - 6.DTD(DocumentType)
(実習課題2)
以下のXML文書を出力するプログラムを作成しなさい
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE person PUBLIC "-//Four Dimensional Data, Inc.//DTD DOM Example 1.0//EN" "DOMExample.dtd"> <person> <name>Taro Yamada</name> <age>31</age> <license>Sun Certified Programmer</license> <license>Sun Certified Developer</license> </person>
解答例
package com.techscore.dom.chapter6.exercise2; import java.io.File; import java.io.FileOutputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.DOMImplementation; import org.w3c.dom.Document; import org.w3c.dom.DocumentType; import org.w3c.dom.Element; /** * DtdXmlFileCreator.java * * TECHSCORE Java XML DOM XSLT 6章 実習課題2 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ public class DtdXmlFileCreator { public static String PUBLIC_ID = "-//Four Dimensional Data, Inc.//DTD DOM Example 1.0//EN"; public static String SYSTEM_ID = "DOMExample.dtd"; public static void main(String[] args) throws Exception { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); DOMImplementation domImpl = builder.getDOMImplementation(); DocumentType docType = domImpl.createDocumentType("person", PUBLIC_ID, SYSTEM_ID); // XMLの生成 Document document = domImpl.createDocument("", "person", docType); Element person = document.getDocumentElement(); person.appendChild(document.createTextNode("\n")); Element name = document.createElement("name"); name.appendChild(document.createTextNode("Taro Yamada")); person.appendChild(name); person.appendChild(document.createTextNode("\n")); Element age = document.createElement("age"); age.appendChild(document.createTextNode("31")); person.appendChild(age); person.appendChild(document.createTextNode("\n")); Element license = document.createElement("license"); license.appendChild(document.createTextNode("Sun Certified Programmer")); person.appendChild(license); person.appendChild(document.createTextNode("\n")); license = document.createElement("license"); license.appendChild(document.createTextNode("Sun Certified Developer")); person.appendChild(license); person.appendChild(document.createTextNode("\n")); // DTD部分の表示 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transformer = transFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.setOutputProperty(OutputKeys.DOCTYPE_SYSTEM, SYSTEM_ID); transformer.setOutputProperty(OutputKeys.DOCTYPE_PUBLIC, PUBLIC_ID); // XMLファイルを出力 DOMSource source = new DOMSource(document); File buildFile = new File("personByChap6_2.xml"); FileOutputStream os = new FileOutputStream(buildFile); StreamResult result = new StreamResult(os); transformer.transform(source, result); } }