Java XML SAX解析器丢失数据

Java XML SAX解析器丢失数据,java,xml,sax,saxparser,Java,Xml,Sax,Saxparser,我正在使用SAX解析下一种类型的XML: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <ROOT> <MESSAGES> <MESSAGE> <SUBJECT><![CDATA[Some text]]></SUBJECT> <BODY><![CDATA

我正在使用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[mail1@domain.com]]></TO>
                <TO><![CDATA[mail2@domain2.com]]></TO>
            </RECIPIENTS>
        </MESSAGE>
        <MESSAGE>
            <SUBJECT><![CDATA[Some text]]></SUBJECT>
            <BODY><![CDATA[Some text1 Some Text2 ]]></BODY>
            <RECIPIENTS>
                <TO><![CDATA[mail1@domain.com]]></TO>
                <TO><![CDATA[mail2@domain2.com]]></TO>
            </RECIPIENTS>
        </MESSAGE>

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

</ROOT>
在某些消息项中,y接收不正确的值,例如,当我解析标记体时,当我必须接收“some text1 some Text2”时,我会得到“1 some Text2”,并且我无法找到丢失的数据,甚至无法打印以控制台此方法接收的所有数据

在消息47处,始终在相同位置剪切数据,在其他消息中也始终在相同位置剪切数据。我认为这个问题可能是因为角色在一瞬间调用了两次或更多,但我刚才说的是,我看不到丢失的数据,甚至无法将所有数据打印到控制台

你能帮我吗


谢谢

请注意,字符不能保证一次返回所有文本。在正文中的文本之后,在收到结尾/正文之前,您不能保证您拥有所有文本,也就是说,它可以调用字符一次或多次。您需要添加聚集在一起的文本,直到结束,例如在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();
}

请注意,字符不能保证一次返回所有文本。在正文中的文本之后,在收到结尾/正文之前,您不能保证您拥有所有文本,也就是说,它可以调用字符一次或多次。您需要添加聚集在一起的文本,直到结束,例如在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();
}