我正在创建一个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 & Dealmakers: Technology, media and communications M&A
但它只是获得“交易”。
我该如何解决这个问题?
一个问题可能是因为我将XML传递给SAX解析器的方式。我是否需要更改编码或格式?
目前,我正在将XML作为InputStream
&amp;使用以下代码:
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) {
}
答案 0 :(得分:6)
这里,参数'char [] ch'应该获取整行优惠&amp;交易撮合者:技术,媒体和通讯M&amp; A但它只是获得“交易”。
您似乎假设您将在一次通话中获得全文。这并不能保证。我强烈怀疑你的characters
方法将被多次调用同一文本节点,这对解析器来说是有效的。您需要确保您的代码处理该问题。
SAX解析器可以在一个块中返回所有连续的字符数据,或者它们可以将它分成几个块;但是,任何单个事件中的所有字符都必须来自同一个外部实体,以便Locator提供有用的信息。
可能是您可以设置的功能,以确保您一次获得所有数据;我不确定。
答案 1 :(得分:0)
我猜UTF-8就是问题所在。在该文件中,解析编码定义为ISO-8859-1
所以请尝试以下代码:
InputSource is = new InputSource(yourInputStream);
is.setEncoding("ISO-8859-1");
xmlReader.parse(is);
希望这会有所帮助。