2

次のXMLPullParserをJsoupで解析しています

<title>(??????) [????]0 BLACK LAGOON -???? &middot; ????- ?01-09?</title>
        <guid isPermaLink='true'>http://fenopy.eu/torrent/+black+lagoon+A+01+09+/OTcyOTA3Mw</guid>
        <pubDate>Wed, 27 Feb 2013 11:00:04 GMT</pubDate>
        <category>Anime</category>
        <link>http://fenopy.eu/torrent/+black+lagoon+A+01+09+/OTcyOTA3Mw</link>
        <enclosure url="http://fenopy.eu/torrent/-BLACK-LAGOON-01-09-/OTcyOTA3Mw==/download.torrent" length="569296173" type="application/x-bittorrent" />
        <description><![CDATA[ Category: Anime<br/>Size: 542.9 MB<br/>Ratio: 0 seeds, 3 leechers<br/> ]]></description>
        </item>

これが私の解析コードです

int eventType = -1;

            while (eventType != XmlPullParser.END_DOCUMENT) {
                switch (eventType) {
                // at start of document: START_DOCUMENT
                case XmlPullParser.START_DOCUMENT:                      
                    break;

                // at start of a tag: START_TAG
                case XmlPullParser.START_TAG:
                    // get tag name
                    String tagName = parser.getName();


                    if (tagName.equalsIgnoreCase(TAG_TITLE))                            
                        String t = parser.nextText();

次のテキストを呼び出すと、次の例外がスローされます。

org.xmlpull.v1.XmlPullParserException: unresolved: &middot; (position:TEXT (??????) [????] ...@36:59 in java.io.StringReader@40540698) 
at org.kxml2.io.KXmlParser.exception(KXmlParser.java:273)
at org.kxml2.io.KXmlParser.error(KXmlParser.java:269)
at org.kxml2.io.KXmlParser.pushEntity(KXmlParser.java:818)
at org.kxml2.io.KXmlParser.pushText(KXmlParser.java:849)
at org.kxml2.io.KXmlParser.nextImpl(KXmlParser.java:354)
at org.kxml2.io.KXmlParser.next(KXmlParser.java:1378)
at org.kxml2.io.KXmlParser.nextText(KXmlParser.java:1432)
4

3 に答える 3

7

私は同じ問題を扱っていましたが、非常に簡単な解決策を見つけました。

xmlPullParser.setFeature(Xml.FEATURE_RELAXED, true);
于 2014-11-08T22:11:31.587 に答える
1

xmlが無効です。&middot;xmlの無効な参照です。

XMLには5つの事前定義されたエンティティ参照があります。

&lt; <未満

&gt; >より大きい

&amp;&アンパサンド

&apos; 'アポストロフィ

&quot; " クォーテーションマーク

更新しました

単純に正規表現を使用して、XMLからすべてのHTML文字を置き換えます

XMLString.replaceAll("(&[^\\s]+?;)", ""));

&middot;これは「」に置き換えられます

于 2013-02-27T11:04:08.043 に答える
1

多分あなたはすることができます:

parser.setInput(...);
parser.defineEntityReplacementText("middot", "•");

これは実装では機能しないため、次のようになります。

apache commons-langからは、HTMLの名前付きエンティティのように見えるため、HTML変換を使用します。

String xml = "<foo>Hello &middot; World!</foo>";
xml = StringEscapeUtils.unescapeHtml(xml);

コメントの質問:

すべての無差別を置き換える:

String xml = "<...";

// Place all entities like "&middot;" in square brackets: "[middot]":
xml = xml.replaceAll("\\&(\\w+);", "[$1]");

// But not for the xml entities:
xml = xml.replaceAll("\\[(lt|gt|amp|quot|apos)\\]", "&$1;");
于 2013-02-27T11:15:48.250 に答える