使用SAX解析器的Android XML解析问题
我正在解析资产文件夹中的XML文件以将我的数据转储到数据库中。稍后,我可以获取并在文本视图中显示它。但在解析时,我正在丢失一些数据,也就是说,如果我在解析之前在XML标记中有50个单词,那么在我的数据库中,我无法在解析后找到它们。使用SAX解析器的Android XML解析问题
对于exmple:
at an altitude of about 1350
我使用字符串来保存我的分析值如下::
if (element.equalsIgnoreCase("about")){
String str=parsedValue;
}
在我的数据库解析后
<about>Skandagiri also known as kalavara durga, is an ancient mountain fortess located approximately 70km from Banglore city and 3 km from Chikkaballapur in the Indian State of Karnataka.It is off Bellary road(NH 7, Hyderabad to Bangalore Highway) and overlooks Nandi Hills, Mudddenahalli and Kanive narayanapura.The peak is at an altitude of about 1350 meters</about>
: 我解析这条线
使用一个StringBuffer,因为文字可以按块被读取,你可以阅读的代码只是一部分。 使用字符串缓冲区并附加所有的块,以便最终您将获得完整的文本而不会丢失任何数据。
像这样:
StringBuffer strbufr = new StringBuffer();
if (element.equalsIgnoreCase("about")){
String str = strbufr.toString().trim();
}
@Override
public void characters(char[] ac, int i, int j) throws SAXException {
strbufr.append(ac, i, j);
}
如果您使用的是SAXparser,则最好用Stri包装数据ngBuffer。
看看官方文档:ContentHandler。
这里是有趣的部分从中:
解析器将调用此方法来报告字符数据的每个存储块。 SAX解析器可能会将所有连续的字符数据返回到单个块中,或者它们可能会将其分割为多个块;但是,任何单个事件中的所有字符必须来自相同的外部实体,以便定位器提供有用的信息。
我以这种方式使用了字符串缓冲区,但仍存在问题。我是否正确使用了字符串缓冲区?:: if(element.equalsIgnoreCase(“about”)){ \t \t \t StringBuffer strbuf = new StringBuffer(); \t \t \t strbuf.append(parsedValue); \t \t \t String str = strbuf。的toString(); \t \t} –
您需要在“字符(char [] ch,int start,int length)上附加到StringBuffer” – EvZ
我无法解决此问题。请帮忙吗?;;; public void characters(char [] ac,int i,int j)throws SAXException {0128} \t \t strbuf.append(new String(ac,i,j)); \t \t parsedValue = strbuf.toString(); \t} –
Plaese尝试下面的代码..我想解决你的问题。
Element element = (Element) node.item(i);
NodeList id = element.getElementsByTagName("about");
Element line1 = (Element) id.item(0);
if (null != line1)
AdsFound[i] = getCharacterDataFromElement(line1);
else
AdsFound[i] = "";
什么数据类型是你存储在字符串中的数据库列,什么是它的大小? – Araw
它的类型是TEXT –
没有看到您的解析代码,我只能猜测:SAX解析器可能会传递您必须连接的块的内容。你似乎只返回最后一块。 – Henry