带字符串、Stringbuilder或Stringbuffer的Android SAX XML解析器

带字符串、Stringbuilder或Stringbuffer的Android SAX XML解析器,android,string,saxparser,Android,String,Saxparser,我有一个我正在解析的xml,有一个字段包含很长的文本,但不知怎么的,它被解析器删除了,是不是因为我只使用字符串来获取这些字符,我应该使用字符串缓冲区或生成器。我想要的是仅通过标记提取值 @Override public void characters(char[] ch, int start, int length) throws SAXException { if (elementOn) { // its not reading element value, though

我有一个我正在解析的xml,有一个字段包含很长的文本,但不知怎么的,它被解析器删除了,是不是因为我只使用字符串来获取这些字符,我应该使用字符串缓冲区或生成器。我想要的是仅通过标记提取值

@Override
public void characters(char[] ch, int start, int length)
throws SAXException {

    if (elementOn) {
     // its not reading element value, though tag is read.
        elementValue = new String(ch, start, length);
        elementOn = false;
    }
}
全文如下:

  <description>
   <![CDATA[
  Former CPI MLA Manish Kunjam, who returned on Thursday after, theis is a long long text very long that its being dropped.......so what can be done...................................................................................................
  ]]>
 </description>


谢谢,请告诉我……

是的,请使用StringBuilder,因为文本可以分块读取,并且您可能正在阅读像这样的第一行空代码。看

每次点击
startElement

private final StringBuilder mStringBuilder = new StringBuilder();
private String elementValue = null;
private boolean elementOn = false;

public final void characters(char[] ch, int start, int length) throws SAXException {
     if (elementOn)
         mStringBuilder.append(ch, start, length);
}

public final void startElement(String uri, String localName, String qName, Attributes attributes)
        throws SAXException {
    mStringBuilder.setLength(0);
    if (someCondition) elementOn = true;
}

public void endElement(String uri, String localName, String qName) throws SAXException {
     elementValue = mStringBuilder.toString().trim();
     elementOn = false;
}
解析器执行以下操作

  <description> -> startElement("description"), reset StringBuilder
   <![CDATA[    -> characters(""), appended to (empty) String 
  Former CPI..  -> characters("Former.."), appended 
  ]]>           -> characters(""), appended
 </description> -> endElement("description"), read text here
 <description> -> startElement("description"), reset StringBuilder all starts again
->startElement(“说明”),重置StringBuilder
字符(“”),附加到(空)字符串
前消费物价指数->附加字符(“前…”)
]]>->字符(“”),追加
->endElement(“说明”),请阅读此处的文本
->startElement(“说明”),重置StringBuilder,所有重新启动

是的,但这将给我一个包含所有标记的长字符串……有没有办法只获取单个标记……它应该只提供一个元素的内容,因为每次新元素启动时它都会重置StringBuilder。