인터넷에서 문서를 읽으려면 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();
}
}
}
xml 선언을 0으로 가정하고 1에서 열을 번호가 매겨진 (아무도 알 수 없습니까?)라고 가정하면 첫 번째 xmlns 선언 바로 다음에 1 번째 열 62가옵니다. 그래도 네임 스페이스가 어떻게 던질 수 있는지 모르겠습니다. –