Java中的xml.etree.ElementTree等价物

Mat*_*son 11 python java 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)
Run Code Online (Sandbox Code Playgroud)

之后,new_xml_string是

<top><sub a="x" /><tag a="x">value</tag></top>
Run Code Online (Sandbox Code Playgroud)

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

Esk*_*sko 6

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

这主要源于Java API尽可能符合W3C DOM的事实,事实上,Xerces(Java当前的原生XML解决方案)自豪地遵从大量与XML相关的W3C规范,正如您可以从他们看到的那样首页.

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

  • JDOM,大大简化了DOM操作,我敢说有时甚至是愉快的,当与Jaxen混合时就像魅力一样- 好吧,除非你用命名空间来解决这个问题.
  • XOM现在可以很好地介绍Java XML的错误,以及他们如何提出解决问题的方式.在某种程度上,它实际上比JDOM更好,但它还不够广泛,所以无法真实地说明它在现实世界中的表现.绝对值得一试.
  • dom4j,全面的库,支持各种重要功能,并作为XML的实用解决方案发挥作用.dom4j基本上是流行的"老,久经考验,可靠"的选择.

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

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