2010-04-22 28 views
5

有很多問題需要最好的XML解析器,我更關心什麼是最像Groovy for Java的XML解析器?在Java中執行XML的更好方法

我想:

SomeApiDefinedObject o = parseXml(xml); 
for(SomeApiDefinedObject it : o.getChildren()) { 
    System.out.println(it.getAttributes()); 
} 

最重要的事情是,我不希望創建一個類每一種類型的XML節點,我寧願只是他們都處理爲字符串,而構建XML不需要任何轉換器或任何事情,只是已定義

如果您已經使用Groovy的XML解析器一個簡單的對象,你會知道我在說什麼

另外, WOU對我來說,只使用Java中的Groovy會更好嗎?

+0

@jboyd:你說你不想創建對象......如果速度和內存是一個關注和驗證不是**的問題,那麼Javolution項目就有一個軟實時XML「Stax-like」解析器(我對它一無所知,只是它像Stax一樣,它的重點是速度,低足跡和很少的對象創建)。 – SyntaxT3rr0r 2010-04-22 20:05:28

+1

我不知道Java-Land是否有類似於LINQ-TO-XML的功能? – ChaosPandion 2010-04-22 20:22:04

+0

@WizardOfOdds:這聽起來好像他在寫「對象」時確實是指「階級」。 – 2010-04-22 20:37:54

回答

4

這裏是東西快速您可以Sun Java Streaming XML Parser

FileInputStream xmlStream = new FileInputStream(new File("myxml.xml")); 
    XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(xmlStream); 
    while(reader.hasNext()){ 
     reader.next(); 
     for(int i=0; i < reader.getAttributeCount(); i++) { 
      System.out.println(reader.getAttributeName(i) + "=" + reader.getAttributeValue(i)); 
     } 
    } 
+0

另外,你不能在Java中獲得類似Groovy的簡潔語法。所以要麼使用更簡單的API,要麼使用Groovy。 – 2010-04-22 21:09:56

+0

這是有用的,但不完全是我想要的,問題是我將回來的XML是複雜的,但我只需要它的一小部分...所以我不想鏡像XML heiarchy在java代碼中,我希望它可以神奇地做到這一點,或許使用名稱爲 – walnutmon 2010-04-23 12:13:15

+0

@jboyd的地圖:實際上,這是少數幾個答案之一,您實際上*不*必須在Java代碼中鏡像XML層次結構。我的(和Brian無法解釋的刪除的)是其他人。這些工作非常像你的「我想要」的代碼。 – 2010-04-23 12:20:12

0

我強烈推薦JAXB。非常適合XML < - > Java對象框架。

0

我有與XStream良好的經驗。它相當快速,並且將序列化和反序列化Java到/來自XML而沒有模式和很少的代碼它只是工作™。它構建的Java對象層次結構將直接反映您的XML。

+0

所以這正是他所做的*不*要* – 2010-04-22 20:38:27

0

我使用Dozer和Castor來獲取OTOM(Object to Object Mapping,對象映射)。

1

看起來你想要的是一個簡單的DOM API,如dom4j提供做。標準庫中已經有一個DOM API(org.w3c.dom包),但它只是API,所以你需要一個單獨的實現 - 不妨使用像dom4j這樣稍高一些的東西。

1

使用Groovy。

您的主要目標似乎是能夠通過對象訪問器以「自然」方式訪問DOM,而Java不會讓您在未定義類的情況下執行此操作。 Groovy,因爲它是「鴨子式」,可以讓你做到這一點。

不使用Groovy的唯一原因是(1)XML處理是應用程序的一小部分,和/或(2)您必須與其他可能想嚴格使用Java編程的人一起工作。

無論你做什麼,都不要決定「只是把它們全部作爲字符串處理」。 XML不是一種簡單的格式,除非你知道內部和外部的規格,否則你不太可能做到。這意味着您的XML將被符合規範的解析器拒絕。

3

我想無恥地插入我編寫的小型開源庫,使得用Java解析XML變得輕而易舉。

查看Jinq2XML。

http://code.google.com/p/jinq2xml/

一些示例代碼看起來像:

Jocument joc = Jocument.load(urlOrStreamOrFileName); 
joc.single("root").children().each(new Action() { 
    public void act(Jode j){ 
     System.out.println(j.name() + ": " + j.value()); 
    } 
}); 
+0

這看起來很棒!感謝分享 – boreas 2012-09-24 10:07:35

+0

它只是用來閱讀xml嗎?你有一個版本可以像添加一個屬性到一個元素一樣操作xml文檔嗎? – boreas 2012-09-24 10:16:29

+0

@boreas對不起,但它仍然只有讀取功能。 – jjnguy 2012-09-24 13:59:03