Web から取得した XML ファイルを解析するために SAX を使用しています。次のようなコードで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
が、今では次のように Web から取得しています。
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.
" という警告が表示されます。
私が間違ってやっていること、またはこれをデバッグする方法についての他のアイデアはありますか?