Java中的xml.etree.ElementTree等价物

时间:2009-11-02 16:44:54

标签: java python xml

我在python中做了很多简单的XML处理,并且变得喜欢ElementTree做事方式。

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

或者我问错了什么?

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


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

  • 简单(我认为在使用DOM之后,任何事情似乎都很简单)
  • 在蟒蛇中感觉自然适合
  • 我需要的代码非常少。

我正在尝试用一个简单的代码示例来说明,但是很难给出一个很好的例子。 这是一次尝试。这只是添加一个带有值和属性的标记到现有的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>

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

4 个答案:

答案 0 :(得分:6)

老实说,Java中的所有XML API都很糟糕,你可以改变你自己的suckage水平,这可能会变得可怕/缓慢到可管理/体面到甚至令人惊讶的确定。

这主要源于Java API尽可能符合W3C DOM的事实,事实上Xerces Java当前的原生XML解决方案)引以自豪正如您从头版中看到的那样,它符合一大堆与XML相关的W3C规范。

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

  • JDOM,简化了DOM操作,我敢说有时甚至是愉快的,当与Jaxen混合时就像魅力一样 - 好吧,除非你点击this problem with namespaces。< / LI>
  • XOM介绍了Java现在的错误,以及他们如何提出解决问题的方式。在某种程度上,它实际上比JDOM更好,但它还不够普及,所以无法真实地说出它在现实世界中的表现。绝对值得一试。
  • dom4j,全面的库,支持各种重要功能,并作为XML的实用解决方案发挥作用。 dom4j基本上是流行的“旧的,经过验证的,可靠的”选项。

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

PS。我目前正在编写自己的XML解析器/导航器作为练习,但尚未确定它将具有哪种API。我的目标是易用性,到目前为止在Java XML API中似乎很少见,但我不完全确定我将提供什么样的API。 Python的ElementTree看起来很有趣,但由于我对它并不完全熟悉,你是否愿意简要总结一下你觉得它的确切内容?

答案 1 :(得分:1)

您可以查看以下备选方案:

dom4j

xom

jdom

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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