2012-09-16 64 views
-1

我無法找到與谷歌的一個很好的例子,所以也許你知道我的教程:使用混合子深度讀取XML?

我想讀取XML到Java將被嵌套這樣

<?xml version="1.0" encoding="UTF-8"?> 
<config> 
    <art> 
    <name>x</name> 
    <first>y</first> 
    <alist> 
     <set>1</set> 
     <set>2</set> 
     <set>3</set> 
    </alist> 
    </art> 
    <art> 
    <name>z</name> 
    <first>a</first> 
    <alist> 
     <set>1</set> 
     <set>2</set> 
     <set>3</set> 
    </alist> 
    </art> 
... 
</config> 

我可以做就像http://www.developerfusion.com/code/2064/a-simple-way-to-read-an-xml-file-in-java/,但沒有其他標籤,如thos「set」。 我是一個新手,我學習的例子。

最好的問候,

Adreas

回答

1

我會用同樣的答案,從這個帖子:How can I parse such a document?

一個好的做法是使用能體現自己的XML架構對象模型。

使用該模型,解析器所要做的就是在解析過程中構建對象。

此外,您還可以使用一些優秀的框架構建只是爲了將XML文件轉換爲Java對象,如XStream

0

DOM解析器,SAX分析器或Pull解析器善於較小的水平來分析,它就會變得難以管理更大.....

嘗試使用下面的:

-JAXP and JAXB

-Castor

0

您可以使用JAXB (JSR-222)將XML讀入您可以按照需要處理的Java對象。 JAXB的實現被包括在JDK/JRE開始與Java SE 6下面是一個例子:

配置

JAXB是例外配置。這意味着您只需在希望XML表示與默認值不同的地方添加註釋(請參閱:http://blog.bdoughan.com/2012/07/jaxb-no-annotations-required.html)。

package forum12448687; 

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Config { 

    private List<Art> art; 

} 

藝術

package forum12448687; 

import java.util.List; 
import javax.xml.bind.annotation.*; 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Art { 

    private String name; 

    private String first; 

    @XmlElementWrapper 
    @XmlElement(name="set") 
    private List<String> alist; 

} 

演示

下面的代碼演示瞭如何讀取XML爲從對象,然後寫回XML。

package forum12448687; 

import java.io.File; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     JAXBContext jc = JAXBContext.newInstance(Config.class); 

     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     File xml = new File("src/forum12448687/input.xml"); 
     Config config = (Config) unmarshaller.unmarshal(xml); 

     Marshaller marshaller= jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(config, System.out); 
    } 

} 

input.xml中/輸出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<config> 
    <art> 
     <name>x</name> 
     <first>y</first> 
     <alist> 
      <set>1</set> 
      <set>2</set> 
      <set>3</set> 
     </alist> 
    </art> 
    <art> 
     <name>z</name> 
     <first>a</first> 
     <alist> 
      <set>1</set> 
      <set>2</set> 
      <set>3</set> 
     </alist> 
    </art> 
</config>