XML SAX Parser丢失了数据

jza*_*lla 1 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[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>
Run Code Online (Sandbox Code Playgroud)

调用方法字符时

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

一些消息项目,Y收到incorret值,例如,当我解析标签的身体我得到"1某些文本2"时,我不得不收到"有些text1的一些文本2",我无法找到丢失的数据,即使打印控制在此方法中收到的所有数据.

在消息47处,始终在相同位置切割数据(以及在其他消息中,总是相同的位置).我认为这个问题可能是因为角色在一瞬间呼叫两次或更多,但我之前说过,我无法看到丢失的数据甚至打印到控制台.

你能帮我吗?

谢谢

Woo*_*ody 6

请注意,字符不保证一次性返回所有文本.在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();
}
Run Code Online (Sandbox Code Playgroud)