2013-08-12 25 views
0

我有一個XML文件,它讀起來就像SAXParser的拼接概率

<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; 

    } 
} 

,但是這僅返回「微軟將開始銷售其」

我讀解析器可能會執行多個字符調用。 如何將不同的呼叫連接在一起?你能解釋一下邏輯流程嗎?

附加信息: 我做了一個打印所有的元素,看來其餘的句子沒有被調用,爲什麼?

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 

回答

0

characters(char ch[], int start, int length)方法不讀飽滿的線條,你應該字符存儲在一個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(); 
} 
+0

請參閱我的其他信息。薩克斯並不打印線的其他部分,但是立即跳轉到下一個事件 – Jean

0

已解決。

public void endElement(String uri, String localName, 
    String qName) throws SAXException { 
     if (qName.equalsIgnoreCase("event")) { 
       scored = false; 
      } 
      if (qName.equalsIgnoreCase("subevent")){ 
       subevent=false; 
      } 
}