2012-04-27 15 views
1

を失った:いくつかのMESSAGE項目でXML SAXパーサは、私はSAXでXMLの次の種類の解析だデータ

<?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を解析しているときに私は'を取得するいくつかのText2'を受信する必要があります'Some text1 Some Text2'と私は紛失したデータを見つけられず、受信したすべてのデータこの方法で。

メッセージ47で、常に同じ位置(他のメッセージでも常に同じ位置)でデータを切断します。私はこの問題は文字が一瞬で2回以上呼び出されていることが原因だと思うが、私が前に言ったことは、失われたデータをコンソールにすべて印刷することさえできない。

お願いします。

おかげで、文字が一度にすべてのテキストを返すように保証するものではありません

答えて

5

注意。 BODYのテキストの後に、終わり/ BODYを受け取るまで、つまり1回または複数回文字を呼び出すことができるまで、すべてのテキストを保障することはできません。最後になるまで、一緒になるテキストを追加する必要があります(例: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(); 
} 
関連する問題