1

我正在解析资产文件夹中的 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;
}   
4

3 回答 3

2

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

Parser 将调用此方法来报告每个字符数据块。SAX 解析器可以在单个块中返回所有连续的字符数据,也可以将其拆分为多个块;但是,任何单个事件中的所有角色都必须来自同一个外部实体,以便定位器提供有用的信息。

于 2013-01-12T10:11:19.810 回答
2

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] = "";
于 2013-01-12T11:02:50.377 回答
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);
        }
于 2013-01-26T12:35:17.780 回答