我正在使用 SAX 解析我从网络上提取的 XML 文件。我使用类似于以下的代码扩展了DefaultHandler :
public class ArrivalHandler extends DefaultHandler {
@Override
public void startElement(String namespaceUri, String localName, String qualifiedName, Attributes attributes) throws SAXException {
if (qualifiedName.equalsIgnoreCase("resultSet")) {
System.out.println("got a resultset");
} else if (qualifiedName.equalsIgnoreCase("location")) {
System.out.println("got a location");
} else if (qualifiedName.equalsIgnoreCase("arrival")) {
System.out.println("got an arrival");
} else {
System.out.println("There was an unknown XML element encountered: '" + qualifiedName + "'");
}
}
@Override
public void endElement(String namespaceUri, String localName, String qualifiedName) throws SAXException {
// we'll just ignore this for now
}
@Override
public void characters(char[] chars, int startIndex, int length) throws SAXException {
// ignore this too
}
}
我遇到的问题是我得到了一系列空元素。日志内容如下:
There was an unknown XML element encountered: ''
There was an unknown XML element encountered: ''
There was an unknown XML element encountered: ''
etc
当我只是传递parser.parse
一个本地文件时,这很好用,但现在我将它从网上拉出来:
HttpClient httpClient = new DefaultHttpClient();
resp = httpClient.execute("http://example.com/whatever");
SAXParserFactory saxFactory = SAXParserFactory.newInstance();
ArrivalHandler handler = new ArrivalHandler();
SAXParser parser = saxFactory.newSAXParser();
parser.parse(resp.getEntity().getContent(), handler);
我得到了上面描述的(显然)空结果。
到目前为止我所调查的:
- 我将
InputStream
from转换resp.getEntity().getContent()
为字符串并将其转储出来,看起来我正确地从服务器获取 XML。 - 没有抛出异常,但有一条警告显示为“
W/ExpatReader(232): DTD handlers aren't supported.
”。
关于我做错了什么或如何调试它的任何其他想法?