我正在制作一个 android 应用程序,我在其中使用 SAX 解析器解析 XML。
在 XML 中有标签:
<title>Deals & Dealmakers: Technology, media and communications M&A </title>
如您所见,它包含一些特殊的章程,例如 &
问题是我正在使用 SAX 的隐式方法:
@Override
public void characters(char[] ch, int start, int length) throws SAXException{}
在这里,参数 'char[] ch' 应该获取整行 Deals &交易撮合者:技术、媒体和通信并购
但它只获得“交易”。
我该如何解决这个问题?
一个问题可能是因为我将 XML 传递给 SAX 解析器的方式。我需要更改编码或格式吗?
目前,我将 XML 作为 InputStream
传递并使用以下代码:
HttpResponse httpResponse = utils.sendRequestAndGetHTTPResponse(URL);
if (httpResponse.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = httpResponse.getEntity();
InputStream in = entity.getContent();
parseResponse(in);
}
// Inside parseResponse method:
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xmlReader = sp.getXMLReader();
MyHandler handler = new MyHandler();
xmlReader.setContentHandler(handler);
xmlReader.parse(new InputSource(in));
} catch (Exception e) {
}
最佳答案
Here, the parameter 'char[] ch' is supposed to fetch the entire line Deals & Dealmakers: Technology, media and communications M&A But it is only getting "Deals ".
您似乎假设您会在一次通话中获得全部文本。不能保证这一点。我强烈怀疑您的 characters
方法将针对同一个文本节点被多次调用,这对解析器来说是有效的。您需要确保您的代码能够处理该问题。
来自documentation :
SAX parsers may return all contiguous character data in a single chunk, or they may split it into several chunks; however, all of the characters in any single event must come from the same external entity so that the Locator provides useful information.
可能您可以设置一项功能来确保一次性获取所有数据;我不确定。
关于java - SAX 的 characters() 方法未解析文本节点中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14293052/