«Не удалось найти подходящий синтаксический анализатор SAX2» при попытке анализа XML с помощью учебника по XOM - PullRequest
1 голос
/ 22 июля 2011

Я пытаюсь найти простой способ получить контент XML в моем приложении для Android. Я дал XOM попробовать. Создание XML не проблема, но когда я пытаюсь разобрать некоторые ... эмулятор падает с принудительным закрытием. Я понятия не имею, где искать.

У меня есть права доступа к Интернету, указанные в манифесте.

В отладке / переменных я вижу "Не удалось найти подходящий синтаксический анализатор SAX2" и в logcat что-то то же

07-22 12:27:51.565: INFO/System.out(683): debugger has settled (1337)
07-22 12:27:52.034: INFO/dalvikvm(683): Could not find method org.apache.xerces.impl.Version.getVersion, referenced from method nu.xom.Builder.<clinit>
07-22 12:27:52.034: WARN/dalvikvm(683): VFY: unable to resolve static method 2371: Lorg/apache/xerces/impl/Version;.getVersion ()Ljava/lang/String;
07-22 12:27:52.044: DEBUG/dalvikvm(683): VFY: replacing opcode 0x71 at 0x000f
07-22 12:27:52.044: DEBUG/dalvikvm(683): VFY: dead code 0x0012-0049 in Lnu/xom/Builder;.<clinit> ()V
07-22 12:27:52.094: WARN/dalvikvm(683): Unable to resolve superclass of Lnu/xom/XML1_0Parser; (402)
07-22 12:27:52.094: WARN/dalvikvm(683): Link of class 'Lnu/xom/XML1_0Parser;' failed
07-22 12:27:52.104: ERROR/dalvikvm(683): Could not find class 'nu.xom.XML1_0Parser', referenced from method nu.xom.Builder.findParser
07-22 12:27:52.104: WARN/dalvikvm(683): VFY: unable to resolve new-instance 191 (Lnu/xom/XML1_0Parser;) in Lnu/xom/Builder;
07-22 12:27:52.104: DEBUG/dalvikvm(683): VFY: replacing opcode 0x22 at 0x0000
07-22 12:27:52.114: DEBUG/dalvikvm(683): VFY: dead code 0x0002-0007 in Lnu/xom/Builder;.findParser (Z)Lorg/xml/sax/XMLReader;
07-22 12:27:52.554: WARN/dalvikvm(683): Unable to resolve superclass of Lnu/xom/JDK15XML1_0Parser; (8)
07-22 12:27:52.554: WARN/dalvikvm(683): Link of class 'Lnu/xom/JDK15XML1_0Parser;' failed
07-22 12:27:58.441: WARN/ActivityManager(64): Launch timeout has expired, giving up wake lock!
07-22 12:27:58.996: WARN/ActivityManager(64): Activity idle timeout for HistoryRecord{44fdcb80 com.xb.xomtest/.main}

Одной вещью, которую я не получаю, является предупреждение, когда я добавляю банку в мой путь сборки. Не знаю, связано ли что-то с этим:

[2011-07-22 14:38:13 - XOM] Dx warning: Ignoring InnerClasses attribute for an anonymous inner class
(nu.xom.Element$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

код:

package com.xb.xomtest;

import java.io.IOException;

import nu.xom.Builder;
import nu.xom.Document;
import nu.xom.ParsingException;
import android.app.Activity;
import android.os.Bundle;

public class main extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        try {
              Builder parser = new Builder();
              Document doc = parser.build("http://www.cafeconleche.org/");
            }
            catch (ParsingException ex) {
              //System.err.println("Cafe con Leche is malformed today. How embarrassing!");
            }
            catch (IOException ex) {
              //System.err.println("Could not connect to Cafe con Leche. The site may be down.");
            }


    }
}

1 Ответ

4 голосов
/ 25 августа 2011

xom jar сам по себе не включает в себя все, что вам нужно - и, по-видимому, не включает стандартный анализатор Android в свой список подходящих.

выдержка из http://www.xom.nu/install.xhtml:

"Java 1.3 и более ранние версии не имеют встроенного синтаксического анализатора XML, поэтому в этих средах вам также необходимо установить поддерживающие библиотеки XOM. К ним относятся xalan.jar, xercesImpl.jar, normalizer.jar и xml-apis.jar, и находятся в каталоге lib. Версии, поставляемые с XOM, немного быстрее и менее глючные, чем версии, поставляемые с JDK, поэтому вы можете использовать их даже в Java 1.4 и более поздних версиях. "

Для базового анализа добавление xercesImpl.jar вместе с xom-1.2.7.jar представляется достаточным - мой код, у которого возникла та же проблема (жалуется на отсутствующий синтаксический анализатор sax2), теперь анализирует ввод OK.

Я получаю то же самое предупреждение Dx о внутренних классах, так что это не кажется фатальным: -).

...