2011-05-03 82 views
2

有许多很不错的json libs lika GSon。但对于XML我只知道Xerces/JDOM,并且都有枯燥的API。 我不喜欢使用像DocumentFactory,XpathExpressionFactory,NodeList等不必要的对象。 因此,根据groovy/scala等语言的原生XML支持,我有一个问题。 是否有极简主义的Java XML IO框架?什么是最简单和最简约的java xml api?

PS的XStream/JAXB良好的序列化/反序列化,但在这种情况下,我希望在XML使用XPath流的一些数据,例如。

回答

1

Dom4J岩石。这是很容易的和可以理解

示例代码:

public static void main(String[] args) throws Exception { 
    final String xml = "<root><foo><bar><baz name=\"phleem\" />" 
        + "<baz name=\"gumbo\" /></bar></foo></root>"; 

    Document document = DocumentHelper.parseText(xml); 

    // simple collection views 
    for (Element element : (List<Element>) document 
      .getRootElement() 
      .element("foo") 
      .element("bar") 
      .elements("baz")) { 
     System.out.println(element.attributeValue("name")); 
    } 

    // and easy xpath support 
    List<Element> elements2 = (List<Element>) 
     document.createXPath("//baz").evaluate(document); 
    for (final Element element : elements2) { 
     System.out.println(element.attributeValue("name")); 
    } 
} 

输出:

phleem
gumbo
phleem
gumbo

+0

真的很简约吗?当我导入它时,我得到了java.lang.NoClassDefFoundError:org/jaxen/JaxenException。添加jaxen后,添加了大约7MB的依赖关系。 – 2012-02-24 11:53:23

+0

@lechlukasz如果您使用xpath,则只需要jaxen。和7MB并不差... – 2012-02-24 13:54:56

2
约StAX的

什么?使用Java 6,你甚至不需要额外的库。

0

Deppends你的Java对象是多么复杂:他们等含自我(比如图中的节点)。如果你的对象很简单,你可以使用Google gson--它是最简单的API(IMO)。 在Xstream中,当您需要调试时,事情会变得杂乱无章。当您为XStream选择一个辅助驱动程序时,也需要小心谨慎。

3

的W3C DOM模型是令人不快和麻烦,我同意。 JDOM已经非常简单了。我知道的唯一其他DOM API更简单的是XOM

+0

看起来像XOM是最好的选择:流+简约。 – yura 2011-05-03 09:30:09

+0

XOM不稳定,它是LGPL。 – aviad 2011-05-03 10:00:07

+0

@aviad:它不稳定,它像一块岩石一样坚固。否则请给我证据。从什么时候起LGPL是一件坏事? – skaffman 2011-05-03 10:03:09

0

JDOM和XOM可能是最简单的。 DOM4J更强大但更复杂。 DOM非常糟糕。用Java处理XML总是比处理JSON更复杂,因为JSON是为结构化数据设计的,而XML是为文档设计的,而文档比结构化数据更复杂。为什么不使用专为XML而设计的语言,特别是XSLT或XQuery?

1

尝试VTD-XML。它比具有出色内存占用的DOM解析器快3到4倍。

0

NanoXML非常小,小于50kb。我今天发现了这个,我印象深刻。