前のブログで書いた「これから数回に
わけて、JAXPからXMLからJavaに変換するプログラムのお勉強を公開したいと思います。」についてです。
なお、考えてみたら、別にJavaソースじゃなくっても、XMLからXMLスキーマやRelax,DTDへの変換でも、あるいは、DBのテーブル作成のDDLの自動生成でも、このやりかたでOKです。
ではまず、なにを入力して、なにを出力するかについてです。
以下のようなXMLを入力とします(どんなXMLの形式かについては、後日細かく説明します。簡単に言うと、クラス名がトップのタグ、その子供にクラスの中の変数があるようなもの。テーブル定義の場合、テーブル名がトップのタグ、カラム名がその子供にある場合です)。
以下のようなJavaプログラム(クラス)を出すことを考えます。
setterやgetterも出せることも考えます。
この入力と出力にかんしては、最終的にこういうものを出すという話です。
今回の課題は、以下のとおりです。
■■ 課題
■■ プログラム
以下のとおりです。
JavaでHelloWorld XML(DOM)編を参考にさせてもらいました。
■■ 結果
こんな感じ
■■ 次回は
パラメータと値のとりかた。
いつやるか未定。
わけて、JAXPからXMLからJavaに変換するプログラムのお勉強を公開したいと思います。」についてです。
なお、考えてみたら、別にJavaソースじゃなくっても、XMLからXMLスキーマやRelax,DTDへの変換でも、あるいは、DBのテーブル作成のDDLの自動生成でも、このやりかたでOKです。
ではまず、なにを入力して、なにを出力するかについてです。
入力について |
---|
以下のようなXMLを入力とします(どんなXMLの形式かについては、後日細かく説明します。簡単に言うと、クラス名がトップのタグ、その子供にクラスの中の変数があるようなもの。テーブル定義の場合、テーブル名がトップのタグ、カラム名がその子供にある場合です)。
<?xml version="1.0" encoding="Shift_JIS" ?> <testClass extends="absClass"> <komoku1>9999</komoku1> <komoku2 arrays="*">XXX</komoku2> <komoku3 type="long" /> </testClass> |
出力について |
---|
以下のようなJavaプログラム(クラス)を出すことを考えます。
setterやgetterも出せることも考えます。
public class testClass extends absClass { int komoku1; String[] komoku2; long komoku3; } |
この入力と出力にかんしては、最終的にこういうものを出すという話です。
今回のお題 |
---|
今回の課題は、以下のとおりです。
■■ 課題
DOMを使って、入力のファイルを読み込み、そのタグ名をすべて表示しなさい |
■■ プログラム
以下のとおりです。
JavaでHelloWorld XML(DOM)編を参考にさせてもらいました。
import java.io.*; import javax.xml.parsers.*; import org.w3c.dom.*; public class xmlReadTest { static String inFname = "testClass.xml"; // 入力ファイル public static void main(String[] args) { try { //----------------------------------------------// // 入力ファイルを読み込み // //----------------------------------------------// // 入力ファイルを読み込み、Documentオブジェクトを取得 // (下の行、1行で書きたいんだけど、長いので途中で切った) Document doc = DocumentBuilderFactory.newInstance(). newDocumentBuilder().parse(new File(inFname)); //----------------------------------------------// // クラス名となる、ルート要素を取得して表示 // //----------------------------------------------// Element root = doc.getDocumentElement(); System.out.println(root.getNodeName()); //----------------------------------------------// // 子ノードを取得して、項目の表示 // //----------------------------------------------// // 子ノード全部取得してリストへ NodeList childList = root.getChildNodes(); for (int i = 0 ; i < childList.getLength();i++) { // 子ノード1個取り出し Node oneItem = childList.item(i); // エレメントのとき(改行文字のテキストがありえるので) if ( oneItem.getNodeType() == Node.ELEMENT_NODE ) { // 出力だぴょ System.out.println(oneItem.getNodeName()); } } } catch (Exception e) { e.printStackTrace(); } } } |
■■ 結果
こんな感じ
testClass komoku1 komoku2 komoku3 |
■■ 次回は
パラメータと値のとりかた。
いつやるか未定。