// DocumentImpl Sample
import java.io.*;
import org.apache.xerces.dom.DocumentImpl;
import org.apache.xml.serialize.*;
import org.w3c.dom.*;
public class Main
{
public static void main(String args[])
{
// Documentを作成
Document xml_doc = new DocumentImpl();
// Root要素を追加
Element root = xml_doc.createElement("Taka2s_World");
xml_doc.appendChild(root);
// Rootに子要素を追加
Element music = xml_doc.createElement("Music");
Text music_text = xml_doc.createTextNode("鋭意製作中...");
music.appendChild(music_text);
root.appendChild(music);
Element zakki = xml_doc.createElement("雑記帳");
zakki.setAttribute("更新頻度", "ほぼ毎日");
root.appendChild(zakki);
// XMLファイルに書き出し
try
{
OutputFormat format = new OutputFormat(xml_doc);
// メモ帳で見たいときはこっち
// Writer writer = new OutputStreamWriter(new FileOutputStream("test.xml"), "Shift_JIS");
// IE5で見たいときはこっち
Writer writer = new OutputStreamWriter(new FileOutputStream("test.xml"), "UTF-8");
XMLSerializer serializer = new XMLSerializer(writer, format);
serializer.serialize(xml_doc);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
Source is here. (ZIP Format, 721Byte, Shift-JIS)
タグに、「鋭意製作中...」というテキストを追加する処理、
更新頻度という属性を追加する処理をしています。
このクラスを使えば、XMLの構造を意識しなくても、
appendChildや、appendAttributeなどのメソッドを呼ぶだけで、
自動的にDOMツリーの構造を作ってくれるので、
アプリケーションからXMLを作り出すのが容易になります。
(サンプルプログラムの説明)
ElementやTextを作るときは、DocumentクラスのcreateXxxを呼びます。 属性クラスAttrも作ることが出来ます。music.appendChild(music_text);
<Music>鋭意製作中...</Music>というのは、一見フラットな構造に見えるんですが、 これは実は、MusicというElementの子として、 鋭意製作中というTextノードがぶら下がっている形になります。 なので、appendChildを呼んで、TextをMusicの子として追加しています。zakki.setAttribute("更新頻度", "ほぼ毎日");
Textノードとは逆に、<雑記帳 更新頻度 = "ほぼ毎日">というのは、 フラットな構造であり、要素と属性には親子関係が無いので、 appendChildで追加することは出来ず、setAttributeメソッドで属性をセットします。