2
웹에서 가져 오는 XML 파일을 구문 분석하는 데 SAX를 사용하고 있습니다. 나는 유사한 코드와 DefaultHandler 확장했습니다안드로이드에서 SAX 파싱 문제 ... 빈 요소?
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
}
}
난 데 문제는 그냥 비어있는 일련의 요소를 얻고 있다는 것입니다.
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);
와 나는 (분명히) 얻을 : 난 그냥 로컬 파일 parser.parse
을 통과 할 때
There was an unknown XML element encountered: ''
There was an unknown XML element encountered: ''
There was an unknown XML element encountered: ''
etc
이 잘 작동했지만 지금은 함께 웹에서 잡아 당겨 해요 : 로그 읽기 위에서 설명한 빈 결과. 지금까지 살펴본 무엇
는 :
- 나는 문자열로
resp.getEntity().getContent()
에서InputStream
을 변환하고 그것을 밖으로 버려진 내가 제대로 서버에서 XML을 받고 있어요 것 같습니다. - 가 발생 예외가 없습니다 그러나 "
W/ExpatReader(232): DTD handlers aren't supported.
를 '라는 경고가있다.
내가 이것을 디버깅하는 잘못 또는 어떻게 뭘하는지에 대한 다른 아이디어? docs for ContentHandler.startElement
에서
D' 오. 'localName'은 내가 원하는 것을 내게 주었다. 나는 왜 다른 컨텍스트에서 다르게 그들을 반환하는지 (로컬 대 원격에서 읽기) 이해하지 않습니다. –
Android를 사용할 때와 같은 일이 발생합니다. "웹에서 가져 오기"와 관련이 없습니다. 라이브러리의 내 junit 테스트에서 qualifiedName을 설정합니다. 하지만 Android 프로젝트에서이 라이브러리를 사용하면 qualifiedName 대신 localName이 설정됩니다. 이유 : ( – gaizka
@ 존 스킷 - 네임 스페이스 접두사 속성을 true로 설정하는 방법을 설명 할 수 있습니까? – Sniper