gpt4 book ai didi

java - 使用 Android SAXParser,我的 XML 元素神秘地分成两半

转载 作者:数据小太阳 更新时间:2023-10-29 02:50:42 25 4
gpt4 key购买 nike

它不是'&'

我使用 SAXParser 对象来解析实际的 XML。

这通常是通过将 URL 传递给 XMLReader.Parse 方法来完成的。因为我的 XML 来自对 Web 服务的 POST 请求,所以我将该结果保存为字符串,然后使用 StringReader/InputSource 将该字符串反馈给 XMLReader.Parse 方法。

但是,在 XMLstring 的第 2001 个字符处发生了一些奇怪的事情。
文档处理程序的“字符”方法在 startElement 和 endElement 方法之间被调用两次,有效地将我的字符串(在本例中为项目标题)分成两部分。因为我在我的字符方法中实例化对象,所以我得到了两个对象而不是一个。

这一行,字符串中大约 2000 个字符会触发 'characters' 两次,在“Lower”和“Level”之间中断

<title>SUMC-BOOKSTORE, LOWER LEVEL RENOVATIONS</title>

当我绕过 StringReader/InputSource 解决方法并将平面 XML 文件提供给 XMLReader.Parse 时,它​​工作得非常好。

有关 StringReader 和/或 InputSource 的某些事情以某种方式搞砸了。

这是我的方法,它获取 XML 字符串并通过 SAXParser 进行解析。

    public void parseXML(String XMLstring) {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
xr.setContentHandler(this);

// Something is happening in the StringReader or InputSource
// That cuts the XML element in half at the 2001 character mark.

StringReader sr = new StringReader(XMLstring);
InputSource is = new InputSource(sr);
xr.parse(is);


} catch (IOException e) {
Log.e("CMS1", e.toString());
} catch (SAXException e) {
Log.e("CMS2", e.toString());
} catch (ParserConfigurationException e) {
Log.e("CMS3", e.toString());
}
}

当我在 XML 字符串中达到这一点时,如果有任何关于如何不让“字符”触发两次的想法,我将不胜感激。

或者,向我展示如何使用 POST 请求并将 URL 传递给 Parse 函数。

谢谢。

最佳答案

正如 donroby 所说,解析器在 startElement 和 endElement 之间多次调用字符方法是完全合法的。然而,这根本不是“行为不端”,您不应该试图欺骗事情以使其不会发生。您的解析器似乎使用了 2000 个字符的缓冲区,但还有其他原因可能会将文本节点分成几部分。

您应该做的是在 characters 方法中累积数据,并在确定已为节点累积了所有字符数据后,在 endElement 方法中对其进行处理。

关于java - 使用 Android SAXParser,我的 XML 元素神秘地分成两半,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2549376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com