我正在发送一个返回一些 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><blahblahblah><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><blahblahblah></Result>
.
当我尝试获取此 xml
时使用 NodeList
, <blahblahblah≷
变成字符 <
.
为什么会出现这个问题,我该如何解决?
最佳答案
这可能是相关的:
android DOM parsing with entities in tags
...这导致了这个:
http://code.google.com/p/android/issues/detail?id=2607
...这似乎表明在早期的 Android 版本中,DOM 解析器没有正确处理实体引用。那里的错误报告讨论了有关如何将实体视为单独的子节点而不是合并到听起来很像您的情况的相邻文本节点的内容。
如果这是您遇到的问题,请尝试切换到使用 SAX 解析器。它(恕我直言)也是一个更容易处理的 XML 解析器。
关于android - 从 SOAP 响应获取 "<"而不是 "<"在一台设备上中断,但在另一台设备上中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12519843/