Android SAX的XML解析器与字符串或Stringbuilder或Stringbuffer
问题描述:
我有一个XML,我解析有一个字段包含非常长的文本,但不知何故它被解析器,这是因为我只是使用字符串让这些字符应该使用字符串缓冲区或构建器。我想要的只是通过标签提取价值。Android SAX的XML解析器与字符串或Stringbuilder或Stringbuffer
@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>
感谢PLZ指导我.....
答
是,使用StringBuilder,因为文本可以按块被读取,你可能只是读这是第一个空行代码。见documentation
可以在每次打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
是时间重置的StringBuilder,但是这会给我一个包含所有标签的长字符串... ..有什么办法我只能得到单独的标签... – Programmer 2012-04-26 12:18:18
它应该只给你一个元素的内容,因为每次新元素启动时它会重置StringBuilder。 – zapl 2012-04-26 12:20:53