1

我正在发送返回一些 xml 的 SOAP POST。我一直在更新的设备(带有 Android 4.1 的 Galaxy Nexus)上进行测试,并且运行良好。但是,我只是尝试在旧设备(运行 Android 2.2 的 HTC Desire HD)上运行它,我得到了ParseException: At line 1, column 0: unclosed token. 以下是相关代码:

String xml = null;
Document doc = null;
String SOAPRequest = "[SOAP REQUEST HERE]";          

HttpPost httppost = new HttpPost("[WEBSITE HERE]");
InputStream soapResponse = null;
try {
    StringEntity postEntity = new StringEntity(SOAPRequest, HTTP.UTF_8);
    postEntity.setContentType("text/xml");
    httppost.setHeader("Content-Type", "application/soap+xml;charset=UTF-8");
    httppost.setEntity(postEntity);

    HttpClient httpclient = new DefaultHttpClient();
    BasicHttpResponse httpResponse = (BasicHttpResponse) httpclient.execute(httppost);

    // Convert HttpResponse to InputStream
    HttpEntity responseEntity = httpResponse.getEntity();
    soapResponse = responseEntity.getContent();
    //// printing response here gives me ...<Result>&lt;blahblahblah&gt;<Result>...

    // Get the SearchResult xml
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = factory.newDocumentBuilder();
    doc = db.parse(soapResponse);

} catch ...

NodeList soapNodeList = doc.getElementsByTagName("Result");
xml = soapNodeList.item(0).getFirstChild().getNodeValue();

//// printing xml here gives me "<" 
return xml;

看一下httpResponse,我感兴趣的部分是这样的:<Result>&lt;blahblahblah&gt;</Result>.

当我尝试使用 , 得到这个xmlNodeList&lt;blahblahblah&gl;变成了字符<

为什么这是一个问题,我该如何解决?

4

1 回答 1

1

这可能是相关的:

android DOM解析与标签中的实体

...这导致了这一点:

http://code.google.com/p/android/issues/detail?id=2607

...这似乎表明在早期的 Android 版本中,DOM 解析器不能正确处理实体引用。那里的错误报告讨论了有关如何将实体视为单独的子项而不是合并到相邻文本节点中的内容,这听起来很奇怪,就像您的情况一样。

如果这是您遇到的问题,请尝试切换到使用 SAX 解析器。它(恕我直言)也是一个更容易处理的 XML 解析器。

于 2012-09-20T20:17:11.687 回答