4

以下にリストされているように、SAXパーサーを使用して、事前に形成されたテキストを解析しています。

<content><![CDATA[(a) Definitions. 
   (i) term - Definition of term
   (ii) term 2 - Definition of term 2
   (iii) term 3 - Definition of term 3]]>
</content>

私のハンドラー

public void characters(char ch[], int start, int length){
    if (content) {
        contentText = new String(ch, start, length));
    }   
}     

ただし、文字バッファーには最初の行 "(a) Definitions." しか表示されません。他の行はコピーされていません。不足している行にアクセスするにはどうすればよいですか?

ありがとうございました。

4

2 に答える 2

6

SAXパーサーの仕様によるとcharacters、同じ文字ブロックのチャンクを表す、の複数のコールバックを取得している可能性があります。連続するものを1つの文字列に結合する必要があります。

パーサーは[ characters]メソッドを呼び出して、文字データの各チャンクを報告します。SAXパーサーは、連続するすべての文字データを1つのチャンクで返す場合もあれば、複数のチャンクに分割する場合もあります。ただし、ロケーターが有用な情報を提供できるように、単一のイベントのすべての文字は同じ外部エンティティからのものである必要があります。

于 2012-04-10T19:23:39.763 に答える
1

全文characters()で呼び出される保証はありません。各呼び出しの結果を照合し、end要素を処理したら文字列を確認する必要があります。

于 2012-04-10T19:23:25.560 に答える