问题描述
我正在尝试找到一个简单的方法来在我的Android应用程序中获取XML内容.我试试xom.创建XML没问题,但是当我尝试解析一些......仿真器崩溃了强力关闭.我不知道在哪里看.
我在清单中设置了Internet权限.
在调试/变量中,我可以看到"找不到合适的sax2 parser"以及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}
一件事是我没有得到的是当我将jar添加到我的buildpath时的警告.不知道是否必须与之有关:
[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."); } } }
推荐答案
xom jar本身不会包括所需的所有内容 - 显然不包括其合适的标准Android解析器.
摘录 http://www.xom.nu/install.xhtml :
"Java 1.3及更早版本在这些环境中没有内置XML解析器,您还需要安装XOM的支持库.这些包括Xalan.jar,Xercesimpl.jar,Normalizer.jar和XML-API .jar,并在lib目录中找到.随着xom附带的版本比与JDK捆绑在一起的速度更快,更少的越野车,所以即使在Java 1.4及更高版本中也可能希望使用它们."
对于基本解析,添加Xercesimpl.jar与xom-1.2.7.jar似乎足够 - 我的代码, 具有相同的问题(抱怨缺少SAX2解析器)现在解析输入确定.
我得到了关于内部类的相同dx警告,因此似乎略有致命: - ).
问题描述
I'm trying to find a simple way to get XML content in my Android app. I gave XOM a try. Creating XML is no problem, but when i try to parse some... the emulator crashes with a force close. I have no idea where to look.
I have the internet permissions set in the manifest.
In debug/variables i can see "Could not find a suitable SAX2 parser" and in logcat something the same
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}
One thing that i don't get is the warning when i add the jar to my buildpath. Don't know if something has to do with that:
[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.
The code:
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."); } } }
推荐答案
The xom jar doesn't, by itself, include everything you need - and apparently doesn't include the standard android parser in its list of suitable ones.
excerpt from http://www.xom.nu/install.xhtml:
"Java 1.3 and earlier do not have a built-in XML parser so in these environments you'll also need to install XOM's supporting libraries. These include xalan.jar, xercesImpl.jar, normalizer.jar, and xml-apis.jar, and are found in the lib directory. The versions shipped with XOM are quite a bit faster and less buggy than the ones bundled with the JDK, so you may well want to use them even in Java 1.4 and later. "
For basic parsing, adding xercesImpl.jar along with xom-1.2.7.jar appears to be sufficient - my code, which had the same problem (complaining about a missing sax2 parser) now parses the input OK.
I get the same Dx warning about inner classes, so that doesn't appear to be fatal :-).