我正在使用SAX来解析xml文件。我有一个名为image的标签,其中包含一个大的base64字符串。 SAX不会返回我需要的完整字符串。这是我使用的SAX Parser。
public class ParseQuestions extends DefaultHandler{
Question question;
private Context context;
public ParseQuestions(Context context){
this.context=context;
}
public List<Question> questions(String filename){
try {
// obtain and configure a SAX based parser
SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
// obtain object for SAX parser
SAXParser saxParser = saxParserFactory.newSAXParser();
// default handler for SAX handler class
// all three methods are written in handler's body
DefaultHandler defaultHandler = new DefaultHandler(){
String imageTag="close";
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (qName.equalsIgnoreCase("image")) {
imageTag = "open";
}
}
public void characters(char ch[], int start, int length)
throws SAXException {
if (imageTag.equals("open")) {
question.setImage(new String(ch, start, length));
}
}
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (qName.equalsIgnoreCase("image")) {
imageTag = "close";
}
};
AssetManager mngr = context.getAssets();
InputStream is = mngr.open(filename);;
saxParser.parse(is, defaultHandler);
} catch (Exception e) {
e.printStackTrace();
}
}
}
任何帮助将不胜感激。感谢
答案 0 :(得分:1)
对于一对打开和关闭标记中的文本,可以多次调用characters
方法。
您的代码假设它只被调用一次,这对于小数据通常是正确的,但并非总是如此。
您需要在该标记的startElement方法中初始化缓冲区,在characters方法中收集缓冲区,并将缓冲区转换为endElement中的字符串。