今回は hasXxxx() メソッド。
hasXxxx() メソッドもオブジェクトの状態を取得するメソッドです。 こちらも boolean 値を返します。 ここで見るメソッドは
- hasName()
- hasText()
です。 hasNext() メソッドは列挙のためのメソッド(Iterator インターフェースのメソッド)なのでここでは割愛。
hasName() メソッド
hasName() メソッドは、現在の XML イベントが名前(ここでは QName のこと)を持っていれば true を、そうでないなら false を返します。 具体的には、
- 要素の開始 (StartElement)
- 要素の終了 (EndElement)
の場合に true を、それ以外では false を返します。
実装例:
public boolean hasName() { switch(getEventType()){ case START_ELEMENT: case END_ELEMENT: return true; default: return false; } // もしくは // return isStartElement() || isEndElement(); }
hasText() メソッド
hasText() メソッドは、現在の XML イベントがテキストを持っていれば true を、そうでないなら false を返します。 XMLStreamReader の JavaDoc をみると、テキストを持っているイベントは
- CHARACTERS
- SPACE
- COMMENT
- DTD
- ENTITY_REFERENCE
となっていて、CDATA がテキストを持っているとなっていないのが謎です。 Sun の JDK の実装では CDATA イベントが返されません(CHARACTERS イベントとして返されます*1)が、他の実装でそうなっているかどうかは分かりません。
実装例:
public boolean hasText() { switch(getEventType()){ case CHARACTERS: case SPACE: case COMMENT: case DTD: case ENTITY_REFERENCE: return true; default: return false; } }