0

次のようなxmlファイルがあります

<Event Id="258" Key="123456">
<SubEvent Id="1">
Microsoft will begin selling its &quot;Kinect&quot; full-body motion-sensing game system from November 4, while Sony launched its &quot;Move&quot; motion-controlled gaming system on September 15.  
</SubEvent>
</Event>

パーサー ハンドラーの一部

public void startElement(String uri, String localName,String qName, 
            Attributes atts) throws SAXException {

    if (qName.equalsIgnoreCase("event")) {
         scored = false;
         event = true;
                   if (//my condition){
                        scored = true; 
                   }
                   if (scored){
                           sb= new StringBuffer();
     }
}

public void characters(char ch[], int start, int length) throws SAXException {

    if (event) {
        event = false;
    }

    if (subevent) {
                    if (scored){
                            sb.append(new String(ch, start, length));
                    }
        subevent = false;

    }
}

しかし、これは " Microsoft will begin Selling its " だけを返します。

パーサーが複数の文字呼び出しを行う可能性があることを読みました。異なる呼び出しを連結するにはどうすればよいですか? ロジックの流れを教えてください。

追加情報: すべての要素を出力しましたが、文の残りの部分が呼び出されていないようです。なぜですか??

 Start Element :Event
 Start Element :SubEvent
 SubEvent: 
 Microsoft will begin selling its 
 End Element :SubEvent
 End Element :Event
 Start Element :Event
 Start Element :SubEvent
 SubEvent: 
 Nintendo will sell a new version of its DS handheld device that can play games and show movies in 3D without glasses sometime before March 2011. 
 End Element :SubEvent
 End Element :Event
4

2 に答える 2

0

このcharacters(char ch[], int start, int length)メソッドは行全体を読み取らないため、文字を a に格納StringBufferしてメソッドで使用する必要がありますendElement

public void endElement(String uri, String localName, String qName) throws SAXException
{

     if (qName.equalsIgnoreCase("event")) 
     {
        System.out.println(sb.toString());
     }
     sb = new StringBuffer();
}
于 2013-08-12T10:49:12.440 に答える