2012-04-27 105 views
1

我用SAX解析下一個XML類型:XML SAX解析器數據丟失

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<ROOT> 
    <MESSAGES> 
     <MESSAGE> 
      <SUBJECT><![CDATA[Some text]]></SUBJECT> 
      <BODY><![CDATA[Some text Some Text ]]></BODY> 
      <RECIPIENTS> 
       <TO><![CDATA[[email protected]]]></TO> 
       <TO><![CDATA[[email protected]]]></TO> 
      </RECIPIENTS> 
     </MESSAGE> 
     <MESSAGE> 
      <SUBJECT><![CDATA[Some text]]></SUBJECT> 
      <BODY><![CDATA[Some text1 Some Text2 ]]></BODY> 
      <RECIPIENTS> 
       <TO><![CDATA[[email protected]]]></TO> 
       <TO><![CDATA[[email protected]]]></TO> 
      </RECIPIENTS> 
     </MESSAGE> 

      <!-- List of 50 MESSAGE ITEM--> 
    </MESSAGES> 

</ROOT> 

當字符的方法被調用,

public void characters(char buf[], int offset, int len) throws SAXException 
    { 
    String currentValue = new String(buf, offset, len); 
    System.out.println(currentValue); 
    } 

一些消息項目,Y收到incorret值,例如,當我解析標籤BODY我得到'1 Some Text2'當我必須接收'一些text1一些Text2',我找不到丟失的數據甚至打印控制所有接收的數據用這種方法。

在消息47處,總是在相同的位置(以及在其他消息中,總是相同的位置)剪切數據。我覺得這個麻煩可能是因爲角色在一會兒打電話兩次或更多,但是我之前說過的話,我看不到丟失的數據,甚至打印到控制檯。

你能幫助我嗎?

謝謝

回答

5

請注意,字符不能保證一次返回所有文本。在BODY中的文本之後,您不能保證您收到所有文本,直到您收到結尾/ BODY,即它可以調用一次或多次字符。您需要將您聚到一起的文本添加到一起,例如在一個stringBuilder中:

StringBulder xmlText = new StringBuilder(); 

public void characters(char buf[], int offset, int len) throws SAXException 
{ 
    xmlText.append(buf, offset, len); 

} 

public void endElement(String uri, String localName, String qname) throws SAXException 
{ 
    System.out.println(xmlText.toString()); 
    xmlText = new StringBuilder(); 
}