答案 1
我认为你不应该考虑任何特定的解析器实现。用于 XML 处理的 Java API 允许您以标准方式使用任何符合要求的解析器实现。代码应该更具可移植性,当您意识到特定的解析器已经变得太旧时,您可以将其替换为另一个解析器,而无需更改代码的一行(如果您操作正确)。
基本上,有三种以标准方式处理 XML 的方法:
- 萨克斯管这是最简单的 API。通过定义一个 Handler 类来读取 XML,该类在以串行方式处理 XML 时接收元素/属性内的数据。如果您只计划读取某些属性/元素和/或写回一些值(您的情况),则更快,更简单。
- 多姆此方法创建一个对象树,允许您随机修改/访问它,因此它更适合复杂的 XML 操作和处理。
- 断续器它位于 SAX 和 DOM 之间的路径中间。您只需编写代码,以便在处理数据时从您感兴趣的解析器中提取数据。
忘记专有API,如JDOM或Apache(即Apache Xerces XMLSerializer),因为会将您绑定到一个特定的实现,该实现可以随着时间的推移而发展或失去向后兼容性,这将使您将来在想要升级到新版本的JDOM或您使用的任何解析器时更改代码。如果你坚持使用Java标准API(使用工厂和接口),你的代码将更加模块化和可维护。
没有必要说所有(我还没有全部检查,但我几乎可以肯定)建议的解析器都符合JAXP实现,因此从技术上讲,您可以使用所有解析器,无论哪种。
答案 2
以下是对DOM,SAX,StAX和TrAX的一个很好的比较(来源:http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )
功能 StAX SAX DOM TrAX
接口类型拉取、流式推送、流式处理 内存树 XSLT 规则
易用性高 中 高 中
XPath 功能否 否 是
CPU 和内存好好 好 不定
仅转发是 是 否
读取 XML是 是 是 是
编写 XML是 否 是
克鲁德否 否
推荐
-
Jackson - 递归解析成 Map<String, Object> 我试图简化我的代码:我想存储键和值(所有字符串)。 我实际上正在使用一个来存储它。hat 方式可以是值 () 或新节点 ()。 如何简化此代码?递归函数会很好。
-
-
如何轻松处理CSV文件到List<MyClass> 在我的应用程序中,我使用了很多CSV文件,我必须阅读这些文件并基于它们构建列表。我想找到一个简单的方法来做到这一点。您知道任何简单的框架在不使用配置文件等数量的情况下做到这一
-
使用 Gson 的自定义 JSON 反序列化程序 我在使用Gson解析JSON响应时遇到问题。 JSON 字符串: 但是当我使用Gson解析它时,我有一个异常。我知道这是因为响应数组第一个元素不是对象,而是整数。 所以问题是,我能以某种方式解决
-
Java - 十进制格式.parse 返回具有指定小数位数的双精度值 我希望能够在格式字符串中给定一个小数位数的情况下将字符串转换为Double。所以“###,##0.000”应该给我一个双到3位小数。 编辑 - 添加了有关所发生情况的更多信息 用户在 UI 中输入值 - 该值