0

我发现了一些与此问题相关的帖子,但无法找到解决方案。问题是在 character() 函数上,ch[] 数组包含上次调用的不完整或最后一个元素,这种情况有时会发生,但 98% 的时间可以正常工作。文件名没有特殊字符,也没有奇怪的名称。

如果我们有,

<tag>image1test.jpg<tag> 
<tag>image2bla.jpg<tag>

工作时,char 数组包含正确的值,但当不包含正确的值时,当从示例中为第二个标签调用字符函数时,我们得到,

[i,m,a,g,e,2,b,e,s,t](上次通话的剩余字符)

如何解决?谢谢。

@Override
public void characters(char ch[], int start, int length) {
if(this.v_new){
myNewsXMLDataSet.setNews(new String(ch, start, length));

}
4

1 回答 1

1

解析器不需要只调用characters(char[],int,int)一次您的处理程序。您必须期待多次调用,并且仅在endElement()调用该方法后才处理该值。

public class Handler extends DefaultHandler {

    private StringBuilder sb = new StringBuilder();
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        sb.append(ch, start, length);

    }

    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        doStuffWith(sb.toString());
        sb = new StringBuilder();
    }
}
于 2012-12-05T13:41:06.620 回答