public interface XMLStreamReader extends XMLStreamConstants
XMLStreamReaderはnext()とhasNext()を使用してXMLを反復処理していくように設計されています。データには、getEventType()、getNamespaceURI()、getLocalName()、getText()などのメソッドを使用してアクセス可能です。
next()メソッドを使用すると、リーダーは次の解析イベントを読み取ります。next()メソッドは、読み取ったイベントのタイプを識別する整数値を返します。
イベント・タイプは、getEventType()を使用して判別できます。
イベントの解析は、XML宣言、DTD、開始タグ、文字データ、空白文字、終了タグ、コメント、または処理命令として定義されます。属性イベントまたは名前空間イベントが、クエリー処理の結果としてドキュメントのルート・レベルで見つかる場合もあります。
XML 1.0に準拠するため、XMLプロセッサは、宣言済の未解析エンティティの識別子、表記法宣言およびそれらに関連付けられている識別子をアプリケーションに渡す必要があります。これらの情報は、このインタフェースのプロパティAPIを通じて提供されます。javax.xml.stream.notationsとjavax.xml.stream.entitiesの2つのプロパティによって、これらの情報にアクセスできます。現在のイベントがDTDであれば、List l = (List) getProperty("javax.xml.stream.notations");
の呼出しによって表記法のリストが返されます。List l = (List) getProperty("javax.xml.stream.entities");
の呼出しによって、エンティティ宣言のリストが返されます。これらのプロパティには、DTDイベントの間のみアクセスできます。また、情報が無効な場合はnullが返されるように定義されています。
次の表に、どのメソッドがどのような状態で有効かについて示します。無効な状態で呼び出されたメソッドはjava.lang.IllegalStateExceptionをスローします。
状態ごとの有効なメソッド | |
---|---|
イベント・タイプ | 有効なメソッド |
すべての状態 | getProperty()、hasNext()、require()、close()、getNamespaceURI()、isStartElement()、isEndElement()、isCharacters()、isWhiteSpace()、getNamespaceContext()、getEventType(),getLocation()、hasText()、hasName() |
START_ELEMENT | next()、getName()、getLocalName()、hasName()、getPrefix()、getAttributeXXX()、isAttributeSpecified()、getNamespaceXXX()、getElementText()、nextTag() | ATTRIBUTE | next()、nextTag() getAttributeXXX()、isAttributeSpecified() | NAMESPACE | next()、nextTag()、getNamespaceXXX() |
END_ELEMENT | next()、getName()、getLocalName()、hasName()、getPrefix()、getNamespaceXXX()、nextTag() |
CHARACTERS | next()、getTextXXX()、nextTag() |
CDATA | next()、getTextXXX()、nextTag() |
COMMENT | next()、getTextXXX()、nextTag() |
SPACE | next()、getTextXXX()、nextTag() |
START_DOCUMENT | next()、getEncoding()、getVersion()、isStandalone()、standaloneSet()、getCharacterEncodingScheme()、nextTag() |
END_DOCUMENT | close() |
PROCESSING_INSTRUCTION | next()、getPITarget()、getPIData()、nextTag() |
ENTITY_REFERENCE | next()、getLocalName()、getText()、nextTag() |
DTD | next()、getText()、nextTag() |
XMLEvent
, XMLInputFactory
, XMLStreamWriter
ATTRIBUTE, CDATA, CHARACTERS, COMMENT, DTD, END_DOCUMENT, END_ELEMENT, ENTITY_DECLARATION, ENTITY_REFERENCE, NAMESPACE, NOTATION_DECLARATION, PROCESSING_INSTRUCTION, SPACE, START_DOCUMENT, START_ELEMENT
修飾子と型 | メソッドと説明 |
---|---|
void |
close()
このリーダーに関連付けられているリソースをすべて解放します。
|
int |
getAttributeCount()
このSTART_ELEMENT上の属性の数を返します。このメソッドはSTART_ELEMENTまたはATTRIBUTEのみで有効です。
|
String |
getAttributeLocalName(int index)
指定されたインデックスにある属性のlocalNameを返します。
|
QName |
getAttributeName(int index)
指定されたインデックスにある属性のqnameを返します。
|
String |
getAttributeNamespace(int index)
指定されたインデックスにある属性の名前空間を返します。
|
String |
getAttributePrefix(int index)
指定されたインデックスにある属性の接頭辞を返します。
|
String |
getAttributeType(int index)
指定されたインデックスにある属性のXML型を返します。
|
String |
getAttributeValue(int index)
インデックスにある属性の値を返します。
|
String |
getAttributeValue(String namespaceURI, String localName)
名前空間とlocalNameを持つ属性の正規化された属性値を返します。namespaceURIがnullの場合、名前空間が一致するかどうかは確認されません。
|
String |
getCharacterEncodingScheme()
XML宣言で宣言された文字エンコーディングを返します。宣言されていない場合はnullを返します。
|
String |
getElementText()
テキストのみの要素のコンテンツを読み取ります。テキストのみの要素でない場合は、例外がスローされます。
|
String |
getEncoding()
入力エンコーディングが既知の場合は、その入力エンコーディングを返します。未知の場合はnullを返します。
|
int |
getEventType()
カーソルがポイントしているイベントのタイプを示す整数型コードを返します。
|
String |
getLocalName()
現在のイベントのローカル名を返します。
|
Location |
getLocation()
プロセッサの現在の位置を返します。
|
QName |
getName()
現在のSTART_ELEMENTまたはEND_ELEMENTイベントのQNameを返します。
|
NamespaceContext |
getNamespaceContext()
現在の位置の読取り専用の名前空間コンテキストを返します。
|
int |
getNamespaceCount()
このSTART_ELEMENTまたはEND_ELEMENTで宣言された名前空間の数を返します。このメソッドはSTART_ELEMENT、END_ELEMENT、またはNAMESPACEのみで有効です。
|
String |
getNamespacePrefix(int index)
指定されたインデックスで宣言された名前空間の接頭辞を返します。
|
String |
getNamespaceURI()
現在のイベントがSTART_ELEMENTまたはEND_ELEMENTである場合、このメソッドは接頭辞のURIまたはデフォルトの名前空間を返します。
|
String |
getNamespaceURI(int index)
指定されたインデックスで宣言された名前空間のURIを返します。
|
String |
getNamespaceURI(String prefix)
指定された接頭辞のURIを返します。
|
String |
getPIData()
処理命令のデータ・セクションを取得します。
|
String |
getPITarget()
処理命令のターゲットを取得します。
|
String |
getPrefix()
現在のイベントの接頭辞を返します。イベントが接頭辞を持たない場合はnullを返します。
|
Object |
getProperty(String name)
ベースとなる実装から機能またはプロパティの値を取得します。
|
String |
getText()
構文解析イベントの現在の値を文字列として返します。CHARACTERSイベントの文字列値、COMMENTの値、ENTITY_REFERENCEの置換値、CDATAセクションの文字列値、SPACEイベントの文字列値、DTDの内部サブセットの文字列値を返します。
|
char[] |
getTextCharacters()
このイベントからの文字を含む配列を返します。
|
int |
getTextCharacters(int sourceStart, char[] target, int targetStart, int length)
CHARACTERS、SPACE、またはCDATAイベントに関連付けられているテキストを取得します。
|
int |
getTextLength()
このテキスト・イベントに対するテキスト文字配列内の文字シーケンスの長さを返します。
|
int |
getTextStart()
このテキスト・イベントの最初の文字が保存されているテキスト文字配列へのオフセットを返します。
|
String |
getVersion()
XML宣言で宣言されたXMLバージョンを取得します。宣言されていない場合はnullを返します。
|
boolean |
hasName()
現在のイベントが名前(START_ELEMENTまたはEND_ELEMENT)を持つ場合true、そうでない場合falseを返します。
|
boolean |
hasNext()
構文解析イベントがまだある場合はtrue、そうでない場合はfalseを返します。
|
boolean |
hasText()
現在のイベントにテキストが含まれる場合true、そうでない場合falseを返します。CHARACTERS、DTD、ENTITY_REFERENCE、COMMENT、SPACEの各イベントにはテキストが含まれます。
|
boolean |
isAttributeSpecified(int index)
この属性がデフォルトで作成されたかどうかを示すboolean値を返します。
|
boolean |
isCharacters()
カーソルが文字データ・イベントをポイントしている場合はtrueを返します。
|
boolean |
isEndElement()
カーソルが終了タグをポイントしている場合はtrue、そうでない場合はfalseを返します。
|
boolean |
isStandalone()
XML宣言からスタンドアロン宣言を取得します。
|
boolean |
isStartElement()
カーソルが開始タグをポイントしている場合はtrue、そうでない場合はfalseを返します。
|
boolean |
isWhiteSpace()
カーソルが空白文字だけで構成される文字データ・イベントをポイントしている場合はtrueを返します。
|
int |
next()
次の構文解析イベントを取得します。プロセッサは、連続する文字データをすべて単一のチャンクとして、またはいくつかのチャンクに分割して返します。
|
int |
nextTag()
START_ELEMENTまたはEND_ELEMENTに達するまで、すべての空白文字(isWhiteSpace()がtrueを返す)、COMMENT、またはPROCESSING_INSTRUCTIONをスキップします。
|
void |
require(int type, String namespaceURI, String localName)
現在のイベントが指定の型かどうか、名前空間と名前が現在のイベントの現在の名前空間と名前に一致するかどうかをテストします。
|
boolean |
standaloneSet()
ドキュメントでスタンドアロンが設定されていたかどうかを確認します。
|
Object getProperty(String name) throws IllegalArgumentException
name
- プロパティの名前(null以外)IllegalArgumentException
- nameがnullである場合int next() throws XMLStreamException
次のXMLについて考えます。
<foo><!--description-->content text<![CDATA[<greeting>Hello</greeting>]]>other content</foo>
fooに対するnext()呼出しの動作は次のとおりです。
1- コメント(COMMENT)
2- 文字セクション(CHARACTERS)
3- CDATAセクション(もう1つのCHARACTERS)
4- 次の文字セクション(もう1つのCHARACTERS)
5- END_ELEMENT
注: 空の要素(<tag/>など)は2つの別個のイベント、START_ELEMENTとEND_ELEMENTで報告されます。これにより、空の要素の解析が<tag></tag>と等しく保たれます。hasNext()がfalseを返すと、このメソッドはIllegalStateExceptionをスローします。
NoSuchElementException
- hasNext()がfalseを返したときに呼び出された場合XMLStreamException
- ベースとなるXMLソースの処理にエラーが発生した場合XMLEvent
void require(int type, String namespaceURI, String localName) throws XMLStreamException
type
- イベントのタイプnamespaceURI
- イベントのURI (nullの場合もある)localName
- イベントのlocalName (nullの場合もある)XMLStreamException
- 要求された値が一致しない場合。String getElementText() throws XMLStreamException
if(getEventType() != XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException( "parser must be on START_ELEMENT to read next text", getLocation()); } int eventType = next(); StringBuffer content = new StringBuffer(); while(eventType != XMLStreamConstants.END_ELEMENT ) { if(eventType == XMLStreamConstants.CHARACTERS || eventType == XMLStreamConstants.CDATA || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.ENTITY_REFERENCE) { buf.append(getText()); } else if(eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT) { // skipping } else if(eventType == XMLStreamConstants.END_DOCUMENT) { throw new XMLStreamException( "unexpected end of document when reading element text content", this); } else if(eventType == XMLStreamConstants.START_ELEMENT) { throw new XMLStreamException( "element text content may not contain START_ELEMENT", getLocation()); } else { throw new XMLStreamException( "Unexpected event type "+eventType, getLocation()); } eventType = next(); } return buf.toString();
XMLStreamException
- 現在のイベントがSTART_ELEMENTでない場合、またはテキスト以外の要素が見つかった場合int nextTag() throws XMLStreamException
int eventType = next(); while((eventType == XMLStreamConstants.CHARACTERS && isWhiteSpace()) // skip whitespace || (eventType == XMLStreamConstants.CDATA && isWhiteSpace()) // skip whitespace || eventType == XMLStreamConstants.SPACE || eventType == XMLStreamConstants.PROCESSING_INSTRUCTION || eventType == XMLStreamConstants.COMMENT ) { eventType = next(); } if (eventType != XMLStreamConstants.START_ELEMENT && eventType != XMLStreamConstants.END_ELEMENT) { throw new String XMLStreamException("expected start or end tag", getLocation()); } return eventType;
XMLStreamException
- 現在のイベントが空白文字、PROCESSING_INSTRUCTION、START_ELEMENT、またはEND_ELEMENTでない場合NoSuchElementException
- hasNext()がfalseを返したときに呼び出された場合boolean hasNext() throws XMLStreamException
XMLStreamException
- 次の状態の検出時に致命的なエラーが発生した場合void close() throws XMLStreamException
XMLStreamException
- 関連付けられているリソースの解放でエラーが発生した場合String getNamespaceURI(String prefix)
注:接頭辞「xml」は、「Namespaces in XML」勧告で定義されているように「http://www.w3.org/XML/1998/namespace」にバインドされます。
注: 接頭辞「xmlns」は名前空間http://www.w3.org/2000/xmlns/に解決される必要があります。
prefix
- 検索する接頭辞(null以外)IllegalArgumentException
- 接頭辞がnullである場合boolean isStartElement()
boolean isEndElement()
boolean isCharacters()
boolean isWhiteSpace()
String getAttributeValue(String namespaceURI, String localName)
namespaceURI
- 属性の名前空間localName
- 属性のローカル名(null以外)IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合int getAttributeCount()
IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合QName getAttributeName(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合String getAttributeNamespace(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合String getAttributeLocalName(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合String getAttributePrefix(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合String getAttributeType(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合String getAttributeValue(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合boolean isAttributeSpecified(int index)
index
- 属性の位置IllegalStateException
- START_ELEMENTまたはATTRIBUTEでない場合int getNamespaceCount()
IllegalStateException
- START_ELEMENT、END_ELEMENT、またはNAMESPACEでない場合String getNamespacePrefix(int index)
index
- 名前空間宣言の位置IllegalStateException
- START_ELEMENT、END_ELEMENT、またはNAMESPACEでない場合String getNamespaceURI(int index)
index
- 名前空間宣言の位置IllegalStateException
- START_ELEMENT、END_ELEMENT、またはNAMESPACEでない場合NamespaceContext getNamespaceContext()
int getEventType()
String getText()
IllegalStateException
- この状態が有効なテキスト状態でない場合。char[] getTextCharacters()
IllegalStateException
- この状態が有効なテキスト状態でない場合。int getTextCharacters(int sourceStart, char[] target, int targetStart, int length) throws XMLStreamException
int length = 1024; char[] myBuffer = new char[ length ]; for ( int sourceStart = 0 ; ; sourceStart += length ) { int nCopied = stream.getTextCharacters( sourceStart, myBuffer, 0, length ); if (nCopied < length) break; }
- ベースとなるソースでなんらかのXMLエラーが発生すると、XMLStreamExceptionがスローされることがあります。targetStart引数は0以上で、targetの長さよりも小さい必要があり、lengthは0よりも大きく、targetStartとlengthの合計はtargetの長さ以下であることが必要です。sourceStart
- コピー対象ソース配列内の最初の文字のインデックスtarget
- 転送先配列targetStart
- ターゲットの配列内での開始オフセットlength
- コピーする文字数XMLStreamException
- ベースとなるXMLソースが整形式でない場合IndexOutOfBoundsException
- targetStartが、< 0か >ターゲットの長さの場合IndexOutOfBoundsException
- lengthが< 0か、targetStartとlengthの合計 >ターゲットの長さの場合UnsupportedOperationException
- このメソッドがサポートされていない場合NullPointerException
- targetがnullである場合int getTextStart()
IllegalStateException
- この状態が有効なテキスト状態でない場合。int getTextLength()
IllegalStateException
- この状態が有効なテキスト状態でない場合。String getEncoding()
boolean hasText()
Location getLocation()
QName getName()
IllegalStateException
- START_ELEMENTまたはEND_ELEMENTでない場合String getLocalName()
IllegalStateException
- START_ELEMENT、END_ELEMENT、またはENTITY_REFERENCEでない場合boolean hasName()
String getNamespaceURI()
String getPrefix()
String getVersion()
boolean isStandalone()
boolean standaloneSet()
String getCharacterEncodingScheme()
String getPITarget()
String getPIData()
バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyrightc 1993, 2014, Oracle and/or its affiliates. All rights reserved.