2011-05-03 176 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。我今天發現了這個,我印象深刻。

相關問題