带有String或Stringbuilder或Stringbuffer的Android SAX XML Parser

时间:2012-04-26 11:41:24

标签: android string saxparser

我有一个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>

谢谢你指导我......

1 个答案:

答案 0 :(得分:2)

是的,使用StringBuilder,因为可以以块的形式读取文本,并且您可能正在阅读这样的第一个空行代码。见documentation

每次点击startElement

时,您都可以重置StringBuilder
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;
}

Parser关于以下内容

  <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
相关问题