XMLパーサ

XMLの学習をかねてXMLのパーサを作ってみました。
かなり貧弱なつくりですが、その分簡単で、メモリをあまり使わない(はず)なので、初心者やXMLで問題を抱えている方にとって何らかの解決法を提供できるかもしれません。いずれにせよ使っていただけると幸いです。

なお、XMLパーサはフォルダ"ObjectLib"にあります。このパーサをつかったアプリケーションもありますので参考にして下さい。


クラス Nxml

java.lang.Object
  |
  +--Nxml

class Nxml
extends java.lang.Object

XMLのパーサを表すクラスです。
XMLドキュメントを扱うAPIは全てこのクラスのメソッドで実現されます。

使用例:

  // パーサをつくる(このとき同時にルート要素がつくられる)
Nxml xml = new Nxml();

  // ルート要素を得る
Object root = xml.ルート要素();

  // ルート要素の下に新しい要素を、要素名は"乗用車"、要素のIDは"001"で作成する(要素をつくるときIDが必要になる)
Object 要素1 = xml.新しい要素( root, "乗用車", "001" ); 

  // 要素1の"製造年月日"属性をセット(属性が存在していないときは、属性を新しく作成して値をセットする)
xml.属性値をセット( 要素1, "製造年月日", "1999/07/02" );

  // ファイル"トラック.xml"からXMLドキュメントを読み込んで、ルート要素の下に新しい要素を作る
Object 要素2 = xml.新しい要素( root, new File("トラック.xml"), "002" );

  // 要素2をコピーして新しい要素をルート要素の下に作る
Object 要素3 = xml.新しい要素( root, 要素2, "003" );

  //要素3の"製造年月日"属性を読み出して出力する
System.out.println( xml.属性値( 要素3, "製造年月日" ) );

  // ルート要素をXMLドキュメントとしてファイル"自動車.xml"に保存する
xml.要素を保存( root, new File("自動車.xml") );

注意:

このパーサは一般のXMLのパーサと以下の点が異なります。

(1) 要素を作るときID(要素に固有の文字列、重複のない範囲で任意につけることができる)が必要になります。IDは要素の"ID"属性に値を設定されます。

(2) XMLドキュメントのいわゆる"属性"を読み込むことができません。そのかわり、XMLドキュメントを読み込むとき、子をもたない文字列データのみの要素をみつけると、属性に変換して読み込みます。

(3) XMLドキュメントを出力するとき、属性を子を持たない要素に変換して出力します。


メソッドの概要
 java.lang.Object ルート要素()
    ルート要素を返します           
 java.lang.Object 子要素(java.lang.Object 親要素, java.lang.String ID)
           親要素の子で、IDで指定された要素を返します。
 java.util.Vector 子要素のリスト(java.lang.Object 親要素)
           親要素の子の要素を全てVectorに格納して返します。
 java.util.Vector 子要素のリスト(java.lang.Object 親要素, java.lang.String 要素名) 
           要素名に合致する、親要素の子要素をVectorに格納して返します。
 java.lang.Object 新しい要素(java.lang.Object 親要素, java.lang.Object 引数, java.lang.String ID)
           親要素の下に、引数とIDを元にして、新しく要素を作成して返します。
 java.lang.Object 親要素(java.lang.Object 要素)
           要素の親を返します。
 boolean 属性を削除(java.lang.Object 要素, java.lang.String 属性名)
           属性名で指定される属性を削除します。
 java.lang.String 属性値(java.lang.Object 要素, java.lang.String 属性名)
           属性名で指定される属性の値を返します。
 boolean

属性値をセット(java.lang.Object 要素, java.lang.String 属性名, java.lang.String 属性値)
           属性名で指定される属性に値をセットします。

 java.util.Vector 属性名のリスト(java.lang.Object 要素)
           要素の持つ属性の名前の全てをVectorに格納して返します。
 java.lang.String 要素のID(java.lang.Object 要素)
           要素のIDを返します。
 java.lang.String 要素の名前(java.lang.Object 要素)
           要素の名前を返します。
 boolean

要素を削除(java.lang.Object 要素)
           要素を削除します。

 boolean 要素を保存(java.lang.Object 要素, java.io.File ファイル)
           要素をXMLドキュメントの形式でファイルに保存します。
 
クラス java.lang.Object から継承したメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

メソッドの詳細

ルート要素

public java.lang.Object ルート要素()

          ルート要素を返します。

     戻り値:
         ルート要素


親要素

public java.lang.Object 親要素(java.lang.Object 要素)

    要素の親の要素を返します。

     戻り値:
          要素の親要素
      要素以外の引数のときあるいはルート要素のときはnull 


新しい要素

public java.lang.Object 新しい要素(java.lang.Object 親要素, java.lang.Object 引数, java.lang.String ID)

    新しく要素を作って返します。
    引数の型によって次の4通りの動作をします。

    (1) 引数が要素のときは、その要素の内容を新しい要素にコピーします。
    (2) 引数がjava.io.FileのときはXML文書を読み込んで新しい要素にデータを設定します。
    (3) 引数が文字列のときは、その文字列を要素名として内容がID属性だけの要素を作ります。
    (4) 上の3つのどれにもあてはまらないときは要素を作りません。

     戻り値:
          新しい要素
     要素が作られなかったときはnull

         注意: 
        
引数がFileの場合、XML文書の文法が正しくないときは動作は保証されません。


 子要素のリスト

public java.util.Vector 子要素のリスト(java.lang.Object 親要素)

     戻り値:
         親要素の子要素の配列を格納したVector


子要素のリスト

public java.util.Vector 子要素のリスト (java.lang.Object 親要素,  java.lang.String 要素名)

     戻り値:
         要素名に合致する親要素の子要素の配列を格納したVector


子要素

public java.lang.Object 子要素(java.lang.Object 親要素,    java.lang.String ID)

     戻り値:
          IDに合致する親要素の子要素
     合致する要素がない場合はnull


要素の名前

public java.lang.String 要素の名前(java.lang.Object 要素)

     戻り値:
          要素の名前


要素のID

public java.lang.String 要素のID(java.lang.Object 要素)

     戻り値:
          要素のID


要素を保存

public boolean 要素を保存(java.lang.Object 要素,  java.io.File ファイル)

    ファイルにXML形式で要素を保存します。

     戻り値:
          成功した場合 true
     失敗した場合  false


要素を削除

public boolean 要素を削除(java.lang.Object 要素)

    要素を削除します。

     戻り値:
          成功した場合 true
     失敗した場合  false
        


属性名のリスト

public java.util.Vector 属性名のリスト(java.lang.Object 要素)

    要素の属性の名前を格納したVectorを返します。

     戻り値:
          属性名を格納したVector


属性値

public java.lang.String 属性値(java.lang.Object 要素,    java.lang.String 属性名)

    要素と属性名によって示される属性の値を返します。

     戻り値:
          属性の値
      要素の型が違っていたり、属性名が違うときはnull


属性値をセット

public boolean 属性値をセット(java.lang.Object 要素,  java.lang.String 属性名,  java.lang.String 属性値)

     戻り値:
          成功した場合 true
     失敗した場合  false


属性を削除

public boolean 属性を削除(java.lang.Object 要素,java.lang.String 属性名)

    要素と属性名によって示される属性を削除します。

     戻り値:
          成功した場合  true
       失敗した場合  false