|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
public interface XMLStreamReader
XMLStreamReader インタフェースを使用すると、XML の順方向の読み取り専用アクセスを行うことができます。これは、XML データの最下位レベルでのもっとも効率的な読み取り方法となるように設計されています。
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| フィールドの概要 |
|---|
| インタフェース javax.xml.stream.XMLStreamConstants から継承されたフィールド |
|---|
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 上の属性の数を返します。 |
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 を持つ属性の正規化された属性値を返します。 |
String |
getCharacterEncodingScheme()
XML 宣言で宣言された文字エンコーディングを返します。 |
String |
getElementText()
テキストのみの要素のコンテンツを読み取ります。 |
String |
getEncoding()
入力エンコーディングが既知の場合は、その入力エンコーディングを返します。 |
int |
getEventType()
カーソルがポイントしているイベントの型を示す整数型コードを返します。 |
String |
getLocalName()
現在のイベントのローカル名を返します。 |
Location |
getLocation()
プロセッサの現在の位置を返します。 |
QName |
getName()
現在の START_ELEMENT または END_ELEMENT イベントの QName を返します。 |
NamespaceContext |
getNamespaceContext()
現在の位置の読み取り専用の名前空間コンテキストを返します。 |
int |
getNamespaceCount()
この START_ELEMENT または END_ELEMENT で宣言された名前空間の数を返します。 |
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()
現在のイベントの接頭辞を返します。 |
Object |
getProperty(String name)
基本となる実装から機能またはプロパティーの値を取得します。 |
String |
getText()
構文解析イベントの現在の値を文字列として返します。 |
char[] |
getTextCharacters()
このイベントからの文字を含む配列を返します。 |
int |
getTextCharacters(int sourceStart,
char[] target,
int targetStart,
int length)
CHARACTERS、SPACE、または CDATA イベントに関連付けられたテキストを取得します。 |
int |
getTextLength()
このテキストイベントに対するテキスト文字配列内の文字シーケンスの長さを返します。 |
int |
getTextStart()
このテキストイベントの最初の文字が保存されているテキスト文字配列へのオフセットを返します。 |
String |
getVersion()
XML 宣言で宣言された XML バージョンを取得します。 |
boolean |
hasName()
現在のイベントが名前 (START_ELEMENT または END_ELEMENT) を持つ場合 true、そうでない場合 false を返します。 |
boolean |
hasNext()
構文解析イベントがまだある場合は true、そうでない場合は false を返します。 |
boolean |
hasText()
現在のイベントにテキストが含まれる場合 true、そうでない場合 false を返します。 |
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()
|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。