0

私はAndroidを使用してネットからドキュメントを読んでいますが、問題があるのでここに書いているのは驚きです。多くのサイトでは問題はありませんが、一部のサイトではandroidのxmlパーサーが「不機嫌」です。文字エンコードと関係があるのではないかと思いますが、正確にはわかりません。特に、「wget」でファイルをダウンロードしてandroidにフィードすると、正常に動作します。

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>
    ...

私のサンプルAndroidアプリケーション...

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();

        }

    }
}
4

1 に答える 1

0

文字エンコードは問題ではないことがわかりました。HBO.com Webサイトは、USER-AGENT:ヘッダーに基づいてさまざまなコンテンツを返します。したがって、Androidを使用してhbo.comサイトと通信すると、独自のAndroidクライアントを使用してサイトにアクセスする方法についてのメッセージが返されます。彼らはおそらくウェブブラウザを使用している人々を助けようとしています。USER-AGENTを変更すると、上記のプログラムは正しい(そして解析可能な)xmlドキュメントを取得します。

于 2011-03-25T01:51:50.507 に答える