2009-12-23 3 views
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 

이 잘 작동했지만 지금은 함께 웹에서 잡아 당겨 해요 : 로그 읽기 위에서 설명한 빈 결과. 지금까지 살펴본 무엇

는 :

  1. 나는 문자열로 resp.getEntity().getContent()에서 InputStream을 변환하고 그것을 밖으로 버려진 내가 제대로 서버에서 XML을 받고 있어요 것 같습니다.
  2. 가 발생 예외가 없습니다 그러나 "W/ExpatReader(232): DTD handlers aren't supported.를 '라는 경고가있다.

내가 이것을 디버깅하는 잘못 또는 어떻게 뭘하는지에 대한 다른 아이디어? docs for ContentHandler.startElement에서

답변

3

: 네임 스페이스 - 접두사 속성을 때

정규화 된 이름이 필요가 사실이며, 네임 스페이스 접두사 속성이 false (디폴트) 인 경우 선택 사항입니다.

따라서 namespace-prefixes 속성을 true으로 설정 했습니까?

당신은 대신 URI와 localName를 극복 할 수 있습니까?

+1

D' 오. 'localName'은 내가 원하는 것을 내게 주었다. 나는 왜 다른 컨텍스트에서 다르게 그들을 반환하는지 (로컬 대 원격에서 읽기) 이해하지 않습니다. –

+0

Android를 사용할 때와 같은 일이 발생합니다. "웹에서 가져 오기"와 관련이 없습니다. 라이브러리의 내 junit 테스트에서 qualifiedName을 설정합니다. 하지만 Android 프로젝트에서이 라이브러리를 사용하면 qualifiedName 대신 localName이 설정됩니다. 이유 : ( – gaizka

+0

@ 존 스킷 - 네임 스페이스 접두사 속성을 true로 설정하는 방법을 설명 할 수 있습니까? – Sniper

관련 문제