【问题标题】:xml.etree.ElementTree equivalent in JavaJava 中的 xml.etree.ElementTree 等效项
【发布时间】:2009-11-02 16:44:53
【问题描述】:

我一直在 python 中进行相当多的简单 XML 处理,并逐渐喜欢ElementTree 的做事方式。

在 Java 中是否有类似且易于使用的东西?我发现 DOM 模型有点麻烦,并且发现自己编写的代码比我想做的简单事情要多得多。

还是我问错了?

也许我的问题是:有没有比“XMLUtils”类更好的选择,我看到人们在处理 DOM 时在某些地方实现以简化他们的代码?


在这里添加一点关于我为什么喜欢 ElementTree,因为这个问题被问到了。

  • 简单(我想在使用 DOM 之后一切看起来都很简单)
  • 感觉很自然地适合 python
  • 我只需要很少的代码。

我试图提出一个简单的代码示例来说明,但很难给出一个好的示例。 这是一个尝试。这只是将带有值和属性的标签添加到现有的 xml 字符串。

from xml.etree.ElementTree import *
xml_string = '<top><sub a="x"></sub></top>'
parsed = fromstring(xmlstring)
se = SubElement(parsed, "tag")
se.text = "value"
se.attrib["a"] = "x"
new_xml_string = tostring(parsed)

之后,new_xml_string就是

<top><sub a="x" /><tag a="x">value</tag></top>

不是一个真正涵盖所有内容的示例,但仍然如此。当你想做一些事情时,还有相当简单的标签循环,轻松测试标签和属性的存在以及其他事情。

【问题讨论】:

  • 感谢各位的建议。将首先查看 XOM,看看这是否适合我。

标签: java python xml


【解决方案1】:

老实说,Java 中的所有 XML API 都很糟糕,你只是可以改变你自己陷入的糟糕程度,有时可能会变得可怕/缓慢到易于管理/体面甚至令人惊讶的好。

这一切主要源于 Java API 试图尽可能地兼容 W3C DOM,事实上 XercesJava 当前的原生 XML 解决方案)以兼容从他们的首页可以看到一大堆与 XML 相关的 W3C 规范。

但是,实际的 Xerces API 使用起来非常不愉快,因此多年来出现了多个其他 Java XML 库。目前最受欢迎的是

  • JDOM,大大简化了 DOM 操作,我敢说有时甚至令人愉快,与 Jaxen 混合使用就像一种魅力 - 好吧,除非你点击 this problem with namespaces
  • XOM 有一个精彩的演示文稿,介绍了 Java 的 XML 现在出了什么问题,以及他们如何提出他们的做事方式作为解决方案。在某种程度上它实际上比 JDOM 更好,但它还不够广泛,所以不能真正说出它在现实世界中的表现。不过绝对值得一试。
  • dom4j,功能完善的库,支持各种重要功能,是 XML 的实用解决方案。 dom4j 基本上是流行的“旧的、经过验证的和可靠的”选项。

最后但同样重要的是,我只需要提到StAX,因为它不同,它实际上是用于 XML 的事件驱动流 API。出于好奇,绝对值得一看。

PS。我目前实际上正在编写自己的 XML 解析器/导航器作为练习,但尚未决定它将具有哪种 API。我的目标是易于使用,这在迄今为止的 Java XML API 中似乎很少见,但我并不完全确定我将提供什么样的 API。 Python 的 ElementTree 看起来很有趣,但由于我对它并不完全熟悉,您能否简要总结一下您觉得其中的哪些内容令人愉快?

【讨论】:

  • 编辑了这个问题,因为我确定我不能把它全部放在这里。
  • 感谢您添加示例,我保证在制作 XML API 时会考虑到这一点。完成后我会评论您的问题(大约一个月后,我只花周末编写自己的东西),以便您进行测试。
  • 用于 XML 的 Java Api 确实很糟糕。除了 jaxb,它们的糟糕程度令人惊讶。
【解决方案2】:

您可以考虑以下替代方案:

dom4j

xom

jdom

由于我从未使用过 ElementTree,我不知道哪一个是最接近的。 如果您可以在您的项目中使用 Groovy,那么它提供了一组在处理 XML 时很有帮助的类。

【讨论】:

    【解决方案3】:

    我们发现 XOM (http://www.xom.nu) 提供了简单的子类元素功能。

    【讨论】:

      【解决方案4】:

      确实,Java XML API 在可用性方面并不是最好的。我的首选选项是XOMJDOM,然后是内置的JAXP。有一些关于语言 (Begin Product Tab Sub Links Integrating XML into the Java Programming Language) 中的原生 XML 作为一种新数据类型的传言,但似乎已经停滞不前。

      【讨论】:

        猜你喜欢
        • 2011-01-10
        • 2010-09-12
        • 2014-10-16
        • 2013-12-10
        • 2012-11-03
        • 2012-12-15
        • 1970-01-01
        • 2010-10-15
        • 2010-09-22
        相关资源
        最近更新 更多