7

XHTMLを消費する小さなスクリーンスクレイピングアプリを書いています。XHTMLが無効であることは言うまでもありません。アンパサンドはとしてエスケープされません&

私はAndroidを使用XmlPullParserしていますが、正しくエンコードされていない値に対して次のエラーが発生します。

org.xmlpull.v1.XmlPullParserException: unterminated entity ref 
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'>
@55:134 in java.io.InputStreamReader@43b1ef70) 

これを回避するにはどうすればよいですか?私は次の解決策について考えました:

  1. InputStreamアンパサンドをエンティティ参照に置き換える別のものでラップする
  2. 誤ったマークアップを魔法のように受け入れるようにパーサーを構成する

どちらがより成功する可能性がありますか?

4

2 に答える 2

6

私の場合、XML PULL PARSERで解決できなかったのは「&」であることがわかる前に、私はこれに約1時間立ち往生していたので、解決策を見つけました。だからここにそれを完全に修正するコードのスニペットがあります。

void ParsingActivity(String r) {
    try {
        parserCreator = XmlPullParserFactory.newInstance();
        parser = parserCreator.newPullParser();
        // Here we give our file object in the form of a stream to the
        // parser.
        parser.setInput(new StringReader(r.replaceAll("&", "&amp;")));
        // as a SAX parser this will raise events/callback as and when it
        // comes to a element.
        int parserEvent = parser.getEventType();
        // we go thru a loop of all elements in the xml till we have
        // reached END of document.
        while (parserEvent != XmlPullParser.END_DOCUMENT) {
            switch (parserEvent) {
            // if u have reached start of a tag
            case XmlPullParser.START_TAG:
                // get the name of the tag
                String tag = parser.getName();

URLの解析を扱っていたので、私が&やっていることのほとんどは、に置き換えているだけです。&amp;お役に立てれば。

于 2010-11-17T17:39:38.640 に答える
2

私はあなたの最初のオプションを選びます。アンパサンドを交換することは、他のオプションよりも適切な解決策のようです。2番目のオプションは、誤ったマークアップを受け入れることによって機能させるためのハックのようです。

于 2010-02-15T21:10:41.723 に答える