我正在尝试找到一种在我的Android应用中获取XML内容的简单方法。我试试了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}
我没有得到的一件事是我将jar添加到构建路径时的警告。不知道是否与此有关:
[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.");
}
}
}
答案 0 :(得分:4)
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警告,所以这似乎不是致命的: - )。