public class hiXMLnode extends Object
hiXMLreader.read()
で得られるXMLのノード情報.
publicなメンバ
type ノードの種別 (TAG, TEXT, END, EOD) attributes 属性情報辞書 text 内容(タグ名、テキスト内容)
と幾つかの補助情報から構成される単純な構造体です。
修飾子とタイプ | フィールドと説明 |
---|---|
HashMap<String,String> |
attributes
typeがTAGの場合属性値がセットされる.
|
static int |
END
nodeタイプがEND(終了タグ)であることを示す.
|
static int |
END_OF_NULL
タイプENDが空の終わりでることを示すサブタイプ.
|
static int |
END_OF_STRUCT
タイプENDが構造の終わりであることを示すサブタイプ.
|
static int |
END_OF_TEXT
タイプENDがTEXTの終わりであることを示すサブタイプ.
|
static int |
EOD
nodeタイプがEODまたは無情報であることを示す.
|
Exception |
exception
解析例外があった場合は type==EOD で詳細はここに入る.
|
int |
line
ノードを取得した行番号.
|
int |
nest
階層.
|
static int |
NO_INFO
サブタイプ情報が無いことを示す.
|
String |
source_name
XMLソース名.
|
int |
sub_type
nodeの補助種別.
|
static int |
TAG
nodeタイプがタグであることを示す.
|
String |
text
TAG、TEXTの場合内容がセットされる.
|
static int |
TEXT
nodeタイプがテキストであることを示す.
|
int |
type
nodeの種別.
|
コンストラクタと説明 |
---|
hiXMLnode()
空のnodeを作る
|
修飾子とタイプ | メソッドと説明 |
---|---|
String |
getAttribute(String attrName_)
属性を取得する.
|
boolean |
isTag(String tag_)
タイプがTAGでかつtextが指定文字列であるかチェックする.
|
static String |
nameInXML(String str_)
XMLの名前形式に文字列変換する.
|
static String |
stringInXML(String str_)
XMLデータ文字列形式に変換する.
|
String |
toString()
Java標準のtoStringメソッド.
|
String |
toXMLString()
XMLのノード形式の文字列を得る.
|
public static final int EOD
*XMLが最後に達したかエラーになった場合typeにEODがセットされます。
最外郭のタグのENDを確認する場合、EODの判断は不要です。
type==EODの場合、text,attributesは無効です。
public static final int TAG
public static final int TEXT
public static final int END
public static final int NO_INFO
public static final int END_OF_STRUCT
public static final int END_OF_TEXT
public static final int END_OF_NULL
public int type
読み込んだノード種別がセットされます。
TAG,END,TEXT,EODの何れかの値となります。
<A> TAG:A <B>aaa</B> TAG:B TEXT:aaa END:B <C></C> TAG:C END:C </A> END:A
public int sub_type
NO_INFO,END_OF_STRUCT,END_OF_TEXT,END_OF_NULLの何れかの値となります。
<A> TAG:A(NO_INFO) <B>aaa</B> TAG:B(NO_INFO) TEXT:aaa(NO_INFO) END:B(END_OF_TEXT) <C></C> TAG:B(NO_INFO) END:C(END_OF_NULL) </A> END:A(END_OF_STRUCT)
public String text
TEXTの場合値は通常の文字となっています。"<"などは"<"となっています。
public HashMap<String,String> attributes
属性名Stringをキーとし、値Stringを内容とする辞書です。
type==TAG以外の場合はnullです。
TAGの場合属性値がない場合空のHashMapとなりnullになることはありません。
特定の属性を得る例) if( node.type==hiXMLnode.TAG ){ String a_value= node.attributes.get("at0"); if( a_value!=null ){ System.out.printf("TAG %s has attribute %s %s%n" ,node.text,"at0",a_value); } } 全アトリビュートを調べる例) if( node.type==hiXMLnode.TAG ){ for(String key:node.attributes.keySet()){ System.out.println("name="+key+" value="+node.attributes.get(key)); } }
public int nest
ノードの階層を示します。
public String source_name
hiXMLreader.parseFile(String)
で読み込み指定したファイルまたは
hiXMLreader.setSourceName(String)
で指定した文字列が入ります。
指定がない場合はnullとなります。
public int line
public Exception exception
nullの場合もあります。
XMLのフォーマットに異常がある場合、通常SAXParseException
がセットされます。
public boolean isTag(String tag_)
tag_
- タグ文字列public String toString()
標準のtoStringメソッドを持つので、
// hiXMLnode node; System.out.println("NODE="+node);
のような形で内容を表示することができます。
値の中の"などの特殊文字は全て通常の文字に変換された
状態になっています。
次のコード while( reader.read(node)!=hiXMLnode.EOD ){ System.out.println("node="+node); } で次のデータ <?xml version="1.0" encoding="UTF-8"?> <A at1="ab≈apos;c" at2='xy"z'> <B><C><D>XXXX</D></C><D>kk</D></B><N></N> <A> を読み表示させると次の結果が得られます node=[TAG:A] node=[TAG:B] node=[TAG:C] node=[TAG:D] node=[TEXT:XXXX] node=[END:D] ・・・省略・・・ node=[END:A]
public String toXMLString()
XML記述の形の文字列が得られます。
・TAGの場合 <名前 属性名="属性値" ..>
・ENDの場合 </名前>
・TEXTの場合 内容文字列
・EODの場合 <!-- EOD -->
属性値の並び順は保障されません。
属性値の中のダブルクオートは&になります。
属性値の中のシングルクオートは'になります。
属性値および内容文字列の中の<は<になります。
次のコード while( reader.read(_node)!=hiXMLnode.EOD ){ if( node.type==hiXMLnode.TAG ){ System.out.print("\n"+hiU.indent(node.nest)); } else if( node.sub_type==hiXMLnode.END_OF_STRUCT){ System.out.print("\n"+hiU.indent(node.nest)); } System.out.print(node.toXMLString()); } System.out.println(""); で次のデータ <?xml version="1.0" encoding="UTF-8"?> <A at1="ab≈apos;c" at2='xy"z'> <B><C><D>XXXX</D></C><D>kk</D></B><N></N> <A> を読み表示させると次の結果が得られます。 <A at2="xy"z" at1="ab'c"> <B> <C> <D>XXXX</D> </C> <D>kk</D> </B> <N></N> </A> なお、ネスト表す空白はhiU.indent()が出しています。
public static String nameInXML(String str_)
a-zA-Z0-9_および-以外を_に変換します
str_
- 文字列public static String stringInXML(String str_)
<を<に&を&に"を"に 'を'に 変換します。
str_
- 文字列