Android上的替代DOM API有哪些?

5
我们有一个内部库,使用org.w3c.dom DOM API来读写XML。在尝试在Android上使用此库时,我发现它不再起作用。似乎Android仅实现了DOM API的子集。我不知道原因,我知道这在Android 2.2中已经修复,但我仍然需要针对旧设备进行目标定位。
我知道许多“常规”Java的替代DOM库,如XOM和Dom4j。有人可以推荐符合以下目标的DOM库吗?
- 它必须在Android上工作。 - 它应该很小(因为人们按MB付费)。 - 理想情况下,它应该类似于org.w3c.dom API,因为我需要重写现有代码。
可能不可能同时满足三个目标,但只要满足两个目标就能让我满意。另外,出于好奇,是否有人知道为什么没有完全支持DOM API?我可以理解不实现Java Sound等的原因,但XML对我来说似乎非常重要。

你需要哪些DOM的部分?你的库是否会发出有关未实现或缺失方法的错误? - Nick
Element.getTextContent(),Document.setXmlStandalone(),基本上javax.xml.transform包中的所有内容(用于将DOM对象写回文件)。 - Kees Kist
1个回答

1

我的一般建议是尽量远离DOM解析器,因为与使用直接解析器相比,性能非常糟糕。您最好使用XmlPullParser或SAX进行解析。

我知道,您已经有了使用DOM的代码,并且这就是您想要的方式。但请相信我,在移动设备上不应该使用它。


这是有趣的输入。你有支持你说法的基准测试/研究吗? - Lukas Eder
很多年前我曾经看过,速度大约慢了10倍左右。基本上,当你从使用Resources().getXml()解析到XmlPullParser/SAX再到DOM时,速度会慢一个数量级或更多。 - hackbod
XML世界中的事情已经发生了很大的变化,随着Xerces/Xalan和JVM的改进,甚至包括垃圾回收算法的改进。我觉得DOM今天非常快,并且非常适合大多数用例(虽然不一定适用于Android)。不幸的是,我也无法用事实来支持这一点... - Lukas Eder
1
我们正在谈论Android。欢迎您进行一些性能测试,我自由承认,距离我上次测试已经过去了几年。目前,我强烈建议人们避免使用它。即使仅仅是将整个XML文件作为解析结构加载到RAM中,这对于移动设备来说也不是太理想。 - hackbod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接