2011-03-24 4 views
0

인터넷에서 문서를 읽으려면 Android를 사용하고 있습니다. 문제가 있기 때문에 놀랍습니다. 많은 사이트에 대해서는 문제가 없지만 일부 사이트의 경우 안드로이드의 xml 파서는 "심술 궂다". 나는 그것이 문자 인코딩과 관련이 있다고 의심하지만, 나는 정확히 무엇이 확실하지 않다. 특히 "wget"을 사용하여 파일을 다운로드하고 Android에 피드하면 잘 작동합니다.Android SAX 파서가 네트워크 작업 문서를 읽지 않습니다 (문자 인코딩/인코딩 문제)?

Android의 오류 메시지 03-23 ​​21 : 54 : 47.383 : ERROR/xml (9062) : org .apache.harmony.xml.ExpatParser $ ParseException : 행 1, 열 62 : 구문 오류

xml을 다운로드 할 때 문제가없는 것 같습니다.

<?xml version="1.0" encoding="UTF-8"?> 
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"> 
    <channel> 
    ... 

내 샘플 안드로이드 응용 프로그램

....

package com.example.android.helloactivity; 

import java.net.URL; 

import javax.xml.parsers.SAXParser; 
import javax.xml.parsers.SAXParserFactory; 

import org.xml.sax.Attributes; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 
import org.xml.sax.helpers.DefaultHandler; 

import android.app.Activity; 
import android.os.Bundle; 
import android.util.Log; 
import android.widget.Toast; 

public class HelloActivity extends Activity { 

    class EnclosureHandler extends DefaultHandler { 
     @Override 
     public void characters(char[] ch, int start, int length) 
       throws SAXException { 
     } 

     @Override 
     public void endElement(String uri, String localName, String name) 
       throws SAXException { 
     } 

     @Override 
     public void startElement(String namespaceURI, String localName, 
       String qName, Attributes atts) throws SAXException { 
      Log.i("xml", "lname is : " + qName); 
     } 
    }; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.hello_activity); 

     try { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
      SAXParser sp = spf.newSAXParser(); 
      InputSource is = new InputSource(new URL(
        "http://www.hbo.com/podcasts/billmaher/podcast.xml") 
        .openStream()); 
      sp.parse(is, new EnclosureHandler()); 
     } catch (Throwable t) { 
      Log.e("xml", t.toString()); 
      Toast.makeText(getApplicationContext(), t.toString(), 
        Toast.LENGTH_LONG).show(); 

     } 

    } 
} 
+0

xml 선언을 0으로 가정하고 1에서 열을 번호가 매겨진 (아무도 알 수 없습니까?)라고 가정하면 첫 번째 xmlns 선언 바로 다음에 1 번째 열 62가옵니다. 그래도 네임 스페이스가 어떻게 던질 수 있는지 모르겠습니다. –

답변

0

는 문자 인코딩은 문제가되지 않습니다 밝혀졌습니다. HBO.com 웹 사이트는 USER-AGENT : 헤더를 기반으로 다른 콘텐츠를 반환합니다. 따라서 Android를 사용하여 hbo.com 사이트와 대화하면 안드로이드 클라이언트를 사용하여 사이트에 액세스하는 방법에 대한 메시지를 보냅니다. 그들은 아마 웹 브라우저를 사용하는 사람들을 돕기 위해 노력하고 있습니다. USER-AGENT를 변경하면 위의 프로그램이 올바른 (그리고 구문 분석 가능한) xml 문서를 가져 오게됩니다.

관련 문제