我发现了一些与此问题相关但无法找到解决方案的帖子。问题是在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));
}
答案 0 :(得分: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();
}
}