使用SAX解析器的Android XML解析问题

时间:2013-01-12 10:00:26

标签: android xml-parsing android-xml

我正在从assets文件夹解析XML文件以将我的数据转储到数据库中。稍后我可以获取它并在文本视图中显示它。但是在解析时我丢失了一些数据,也就是说,如果我在解析之前在XML标签中有50个单词,那么在我的数据库中,我无法在解析之后找到所有这些数据。

例如: 我正在解析这一行:

<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>
在我的数据库中解析之后

at an altitude of about 1350 

我使用String来保存我的解析值:

if (element.equalsIgnoreCase("about")){
  String str=parsedValue;
}   

3 个答案:

答案 0 :(得分:2)

如果您使用SAXparser,最好使用StringBuffer包装数据 查看官方文档:ContentHandler
这是有趣的部分:

  

Parser将调用此方法来报告每个字符数据块。 SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块;但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息。

答案 1 :(得分:2)

请尝试以下代码..我认为解决了您的问题。

  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] = "";

答案 2 :(得分:1)

使用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);
        }