java - SAX 的 characters() 方法未解析文本节点中的特殊字符

标签 java android xml xml-parsing sax

我正在制作一个 android 应用程序,我在其中使用 SAX 解析器解析 XML。

在 XML 中有标签:

<title>Deals &amp; Dealmakers: Technology, media and communications M&amp;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/

相关文章:

android - 在 Android 应用中使用 Material Design 2

html - XSLT 值得吗?

java - 如何检测使用 Apache FOP 呈现的 XSL-FO 文档中的溢出或换行符

java - 尽管获得了正确的数据,为什么 RecyclerView 适配器没有正确更新(只是第一次)?

java - 无法找到类 Spring Enum Mybatis 异常的可用构造函数

java - FirebaseCredentials.fromCertificate(serviceAccount) 无法解析服务帐户 : 'project_id' must be set JSONException

java - 在android中等待并通知

android - 如何将控制权从 child 传递给 parent

android - 当文本超过一行时换行 TextView

Java 可调用 : Time taken more than a single thread process