ともさんのHP >プロブラミング >XMLファイルを読み込む方法

JavaでXMLファイルを読み込むサンプルプログラム

JavaでXMLファイルを読み込むには、DocumentBuilderFactoryクラスを用いればよいのですが、Classを自作してみたら意外と簡単にできたので紹介します。

広告


タグの構造

XMLファイルは、タグで情報が管理されています。
例えば、<a>あいうえお</a>とあれば、タグaの中身は「あいうえお」となります。
人の情報を示す場合はこんな感じ

<人間>
 <名前>徳島狸男</名前>
 <性別>男</性別>
 <年齢>220</年齢>
 <詳細情報>
  <電話番号>0120-0120</電話番号>
  <住所>徳島県の山の中</住所>
 </詳細情報>
</人間>

タグの入れ子構造によって情報を区分しています。書き換えると、こんなツリー構造になっています
xmlツリー構造

よく見るとタグには2種類あることがわかります。
木に例えると、枝分けれの部分と、葉の部分です。
このツリーでは、枝別れは人間と詳細情報になります。タグの中に子タグが入っています。そのほかの葉の部分には情報が入っていて、子タグはありません。

タグ情報を格納するクラス

タグの情報を格納するために、ElementというClassを作りました。
Elemantには、
name タグ名を入れる文字列
param 情報を入れる文字列
element[] 小タグを格納するElement配列
を用意しておきます。

public String name ="";
public String param ="";
public Element[] element = null;

Elementのコンストラクタにタグ入りの文字列を渡すと、タグ内文字列の中に子タグがないか調べ、あればElement配列を作成し、子タグ文字列を渡して初期化します。
無ければタグ内の文字列を保持情報としてparamに格納します。
最初にxml文をElamentに渡せば、あとはElementが中に含まれている入れ子のタグを子element、孫element...に自動的に格納してくれます。

広告

サンプルプログラム

タグ情報を格納するElement Classです。Main()内でelementにxml文字列を渡すと、ツリー構造に沿って子elementが作られ、情報が格納されます。

package tomojavalib.swingfx;

import java.util.Vector;

public class Element {
public String name ="";
public String param ="";
public Element[] element = null;

public static void main(String[] s ){
 String ss = "<要素><名前>線A</名前><種類>2点直線</種類><始点>点X</始点><終点>点Y</終点><線情報><色>赤</色><線種>破線</線種><線太さ>普通</線太さ></線情報></要素>";
 Element a = new Element( ss );
}


public Element( String s ){
//名前を取得する
 String ss = this.getName(s);
 if( ss==null ){ name = "" ; param = s; }else{
  //名前タグを外した残りをタグ配列に分割する
  String[] sss = this.getTags( ss );
  if(sss==null){
   //タグがなければ文字列をparamに入れる
   param = ss;
  }else{
   //タグをatai配列に入れる
   element = new Element[ sss.length ];
   for(int i=0;i<sss.length;i++){ element[i] = new Element( sss[i] ); }
  }
 System.out.print( "名前:" + name + " 定義値:" + param );
 if(sss!=null){
  System.out.print( "子タグ:" );
  for(int i=0;i<sss.length;i++){ System.out.print( sss[i] + " , " ); }
 }
   System.out.println( "" );
 }
}

private String[] getTags( String s ){
Vector v = new Vector();
boolean flug=true;
do{
 String[] ss = this.getTag(s);
 if(ss==null){
  flug = false;
 } else{
  v.add( ss[0] );
  s = ss[1];
 }
}while(flug);
if(v.size()==0){ return null; }
String[] rs = new String[ v.size() ] ;
for(int i=0;i<v.size();i++){ rs[i] = (String)v.get(i); }
return rs;
}

/**文字列から1つのタグを取り出し、取り出したタグと残りの文字列を返す*/
private String[] getTag( String s ){
String rt = null;
String lt = null;
String tagname = this.getFastTagName(s);
if( tagname != null ){
int st = s.indexOf( "<" + tagname + ">" );
int et = s.indexOf( "</" + tagname + ">" );
rt = s.substring( st , et + tagname.length()+3 );
lt = s.substring( et + tagname.length()+3 );
}
if(rt==null){ return null; }
return new String[]{ rt , lt };
}


/**nameに値を入れる。Nameタグを外した文字列を返す
 * */
private String getName( String s ){
name = this.getFastTagName(s);
if(name == null){return null;}
int st = s.indexOf( "<" + name + ">" );
int et = s.lastIndexOf( "</" + name + ">" );
String rs = s.substring( st+name.length() + 2 , et );
return rs;
}

/**文字列に含まれている最初のタグの名前を返す*/
String getFastTagName( String s ){
int st = s.indexOf("<");
int et = s.indexOf(">");
if(st==-1){ return null ; }
if(et==-1){ return null ; }
if(st>et){ return null ; }
return s.substring( st+1 , et);
}

}

最終更新日: 2018-03-26 08:16:32

ともさんのHP >プロブラミング >XMLファイルを読み込む方法

このエントリーをはてなブックマークに追加
広告
おすすめ記事
新着ページ

昔の玩具の作りかた  
渋柿で柿渋作り  
ダンゴムシの飼い方  
新旧文化式とドレメ式原型製図を比較  
萩の栽培、手入れ、増やしかた  
エアコンを使わなくても涼しい私の家  
合コン  
ウエストポーチを作りました  
ミシンでボタンを付ける  
ブログの住人  
ヒバカリの飼育  

私の他のサイト

ともさんの箱庭(ブログ)
家庭菜園
3D-CAD
洋裁CAD

いいねなど

 RSS 

Author: Tomoyuki Ito

このサイトの文章・写真の無断転載を禁じます