带字符串、Stringbuilder或Stringbuffer的Android SAX XML解析器
我有一个我正在解析的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
@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。