安卓系统有没有StAX实现?

7

我希望在安卓1.6及以上设备上使用StAX API实现。是否有可用的实现?由于内部类问题,我无法直接使用jar文件。如果没有可用的实现,是否有重新编译实现的方法?是否有其他方法可以将POJO类直接映射到XML和反之亦然,但请排除SAX解析器和DOM解析器。

我认为可以使用JAXB将POJO类映射到XML和反之亦然。但情况是这样的。考虑以下示例:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cars>
<car registration="abc123">
    <brand>BMW</brand>
    <description>Sedan</description>
</car>
<car registration="abc123">
    <brand>Ferrari</brand>
    <description>SportsCar</description>
</car>
</cars>

现在我想要一个包含这两辆车的列表。

JAXB解析器与StAX相比如何表现?


关于这个线程,有人提到了StaxMate,它似乎使用了Woodstox。但是内置的SAX解析器有什么问题吗? - wired00
我的主要目的是将POJO映射到XML,反之亦然。如果有任何直接且更有效的方法来实现这一点,我非常乐意尝试。 - Prabhat
我认为内置的SAX解析器不是真正的XML解析器(标准Java SE JDK使用的Xerces方式),而是基于XPP的子集;这意味着不支持DTD或其他一些高级功能。有时这很重要,但通常不是。另一个可能性是API的便利性;Stax通常比SAX更方便使用。然而,JAXB可以用于SAX和Stax源;因此对于数据绑定,SAX可能运行良好。 - StaxMan
JAXB 运行在 SAX 或 Stax 之上(或者如果必须,DOM,但那只是浪费)。因此,在解析的基础上增加了一些开销;然而,当正确使用时,这种开销并不巨大;可能只比原来多 50%。但是,您必须避免重建主工厂对象,并使用最快的 XML 解析器(例如 Sun 的 Sjsxp 有点慢)。 - StaxMan
2个回答

8
据我所知,WoodstoxAalto都可以在Android上使用。如果有必要,Aalto是Java平台上最快的符合XML解析器;而Woodstox支持最广泛的XML结构(从完整的DTD处理到RelaxNG / XML Schema验证)。
对于将POJO绑定到XML,您还可以考虑Jackson扩展jackson-xml-databind:虽然Jackson主要是JSON处理器,但扩展支持XML的JAXB样式数据绑定。而且比JAXB参考实现更快(请参见jvm-serializers基准测试)。这也应该适用于Android(Jackson本身是Android上排名第一的JSON解析器)。

感谢你提供的信息,Staxman。直到现在,我只使用了标准的SAX解析器。通过这个信息,我将开始阅读关于Aalto的资料。据称它非常快,所以我认为这意味着更高的效率,从而在Android上更好地使用电池。干杯! - wired00
哦,您可能指的是“与JDK捆绑在一起”的“标准”,对于Sun J2SE JDK而言,它是Sun的Sjsxp。它还可以(可惜在编写XML时非常缓慢),但有一个Stax实现确实需要避免,这就是引用实现(RI,由BEA提供,即“stax.codehaus.org”)。至于Aalto,它似乎是一个很好的选择。它的jar文件比Woodstox小一点,并且对于许多用例来说,速度快了两倍。 - StaxMan
1
哦,那很有趣,是啊,我想要一个更快的。我现在正在构建的应用程序对于几个不同的选项卡和列表都严重依赖于XML解析。目前最慢的部分就是XML解析。实际上,Stax、xerxes和aalto似乎都比我目前拥有的更好。顺便说一下,我使用这些导入来进行我的XML解析,其中我实现了自己的XML处理程序(import org.xml.sax.XMLReader, javax.xml.parsers.SAXParser, javax.xml.parsers.SAXParserFactory)。你所指的是这些吗?就像“Sun's Sjsxp”一样?感谢你的建议,伙计。 - wired00
这些是用于使用SAX解析器的(第一个是来自SAX API;第二个是JAXP“包装器”,用于创建SAX解析器实例)。Sun的sjsxp是默认实现Stax API的东西(javax.xml.stream.*)。 - StaxMan

4

1
@Erigami 谢谢!链接已修复! - Robert Massaioli
我在“Simple XML Library”中看不到任何“简单”的东西,它的实现并不困难,但并不像名字所暗示的那样“即插即用”,你需要创建许多公共类并使用有些不直观的注释来读取一个相对简单的XML。我只想检索一些嵌套值,但我需要创建整个XML结构才能获取它。 - htafoya
@htafoya:Simple XML旨在为那些想要序列化和反序列化整个XML主体的人使用。对于它的目的来说,它是完美的。然而,如果你想从XML中提取单个值,那么你需要的是XQuery:http://mxquery.org/?page_id=252 - Robert Massaioli
博客链接已失效。 - free6om
好的呼叫 @free6om。已修复。 - Robert Massaioli
显示剩余5条评论

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