Text节点中的特殊字符未被SAX的characters()方法解析

rei*_*ley 2 java xml android sax xml-parsing

我正在制作一个Android应用程序,我正在使用SAX解析器解析XML.

在XML中有标记:

<title>Deals &amp; Dealmakers: Technology, media and communications M&amp;A </title>
Run Code Online (Sandbox Code Playgroud)

如你所见,它包含一些特殊的章程 &amp;

问题是我正在使用SAX的隐式方法:

@Override
public void characters(char[] ch, int start, int length) throws SAXException{}
Run Code Online (Sandbox Code Playgroud)

这里,参数'char [] ch'应该获取整行Deals &amp; Dealmakers: Technology, media and communications M&amp;A 但它只获得"交易".

我该如何解决这个问题?

一个问题可能是因为我将XML传递给SAX解析器的方式.我需要更改编码或格式吗?

目前,我正在InputStream使用以下代码传递XML :

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) {
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

在这里,参数'char [] ch'应该获取整条线交易和交易商:技术,媒体和通信并购但它只是获得"交易".

您似乎假设您将在一次通话中获得整个文本.这并不能保证.我强烈怀疑你的characters方法将被多次调用同一个文本节点,这对解析器来说是有效的.您需要确保您的代码处理它.

文档:

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

可能是你可以设置,以确保你得到一个去所有的数据的功能; 我不确定.