- 4.1. XML文書を作成する
- 4.2. DOMImplementation
- 4.3. 要素、テキストの付加
4.3. 要素、テキストの付加
要素ノードを作成するには、DocumentオブジェクトのcreateElement(String tagName)メソッドを使用します。引数に、作成する要素の名前を指定します。戻り値として、Elementノードが返されます。作成した要素ノードは、appendChild()メソッドを使用して、DOMツリーに付加します。appendChildメソッドを実行したノードの子ノードとして追加されます。
テキストノードを作成するには、DocumentオブジェクトのcreateTextNode(String data)メソッドを使用します。引数には、テキストノードの内容を指定します。戻り値として、Textノードが返されます。作成したTextノードは、要素と同じように、appendChild()メソッドを使用してDOMツリーに付加します。
それでは、XML文書を作成しましょう。
1 <employees> 2 <employee id="1" >太郎</employee> 3 <employee id="2" >次郎</employee> 4 </employees>
以上のXML文書を出力するプログラムは以下のようになります。
14 public class WriteEmployeeXML{ 15 16 public static void main(String args[]) throws Exception{ 17 ... 21 22 Document document = domImpl.createDocument("","employees",null); 23 Element employees=document.getDocumentElement(); 24 25 Element employee=document.createElement("employee"); 26 employee.appendChild(document.createTextNode("太郎")); 27 employees.appendChild(employee); 28 29 Element employee2=document.createElement("employee"); 30 employee2.appendChild(document.createTextNode("次郎")); 31 employees.appendChild(employee2); ... 41 } 42 43 }
Documentオブジェクトを新しく作成したら、ルート要素「employees」を取得します(22,23行目)。次に、employeesの子要素「employee」を作成しています。「employee」の内容は「太郎」という文字列になります。これより、「太郎」というテキストノードを取得し、employeeの子ノードとして付加します(26行目)。最後にemployee要素をemployees要素の子要素として設定します。同様に内容が「次郎」のemployee要素も作成し、employees要素に付加します。DOMツリーをファイルに出力すれば、完成です。
※実際に出力されるXML文書には、要素間の改行文字やインデントは含まれません。本資料では、見やすいように、例で挙げる出力XMLファイルには、適宜改行やインデントを加えています。
(実習課題2)
DBよりあるテーブルのデータ一覧を取得し、XML文書にして表示するプログラムを作成しなさい。例えば、以下のようなテーブルがあったとします。
Table "customer"
Attribute | Type | Modifier
-----------+-----------------------+----------------------
c_num | character(4) | not null
c_name | character varying(40) | not null
address | character varying(20) | default 'Osaka city'
office | character(2) |
この場合、生成されるXML文書は以下のようになります。
<customer> <data> <c_num>1001</c_num> <c_name>Imada Kouchi</c_name> <address>Osaka city</address> <office>10</office> </data> <data> ... </data> </customer>
- ルート要素の名前はテーブル名
- 1行はdata要素で表す
- 各カラムのデータの値は,カラム名の要素の内容として出力する
- 使用するデータベース、テーブルは任意(Postgresql、Oracle)。