2017-03-09 123 views
-1

我必須將xml文件轉換爲數組列表,但我不知道如何。 這就是我的xml文件的樣子。內置Contact類如何將XML文件轉換爲ArrayList

<?xml version="1.0" encoding="UTF-8" standalone="true"?> 
<data> 
    <record> 
     <name> abc </name> 
     <email> [email protected] </email> 
    </record> 
    <record> 
     <name> asd </name> 
     <email> [email protected] </email> 
    </record> 
     . 
     . 
     . 
</data> 

我的數組列表,它看起來像這樣:

public class Contact{ 
    public String name; 
    public String email; 
    public Contact(String name,String email){ 
     this.name=name; 
     this.email=email; 
    } 
    public boolean contains(String str){ 
     return name.contains(str)|| email.contains(str); 
    } 
    @Override 
    public String toString() { 
     return name+"\n"+email; 
    } 
} 
+0

究竟是什麼問題? –

回答

0

這就是我真正做到的。 這可能對未來某個人有所幫助。

private ArrayList<Contact> parse() throws XmlPullParserException,IOException 
{ 
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    XmlPullParser parser = factory.newPullParser(); 

    AssetManager assetManager = getAssets(); 
    parser.setInput(getAssets().open("myxml.xml"),null); 

    ArrayList<Contact> Contacts = null; 
    int eventType = parser.getEventType(); 
    Contact con = null; 

    while (eventType != XmlPullParser.END_DOCUMENT){ 
     String name; 
     switch (eventType){ 
      case XmlPullParser.START_DOCUMENT: 
       Contacts = new ArrayList(); 
       break; 
      case XmlPullParser.START_TAG: 
       name = parser.getName(); 
       if (name.equals("record")) 
        con = new Contact(); 
       else if (con != null){ 
        if (name.equals("name")) 
         con.name = parser.nextText(); 
        else if (name.equals("email")) 
         con.email= parser.nextText(); 
       } 
       break; 
      case XmlPullParser.END_TAG: 
       name = parser.getName(); 
       if (name.equalsIgnoreCase("record") && con != null) 
        Contacts.add(con); 
     } 
     eventType = parser.next(); 
    } 

    return Contacts; 

}` 
1

您可以使用JAXB ... Unmarshling到XML轉換爲Java對象

<?xml version="1.0" encoding="UTF-8"  standalone="true"?> 
<Question> 

    <id>1</id> 

<Question> 
....  
..... 

問題。 java

import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

    @XmlRootElement 
    public class Question { 
    private int id; 

    @XmlAttribute 
    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
    this.id = id; 
    } 
} 

主要方法

try { 
    File file = new File("question.xml"); 
    JAXBContext jaxbContext = JAXBContext.newInstance(Question.class); 

    Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); 
    Question que= (Question) jaxbUnmarshaller.unmarshal(file); 

    System.out.println(que.getId()); 
    System.out.println("Answers:"); 
    List<Answer> list=que.getAnswers(); 
    for(Answer ans:list) 
     System.out.println(ans.getId()); 

    } catch (JAXBException e) { 
    e.printStackTrace(); 
    } 

將XML文檔轉換爲java對象的步驟。

1.Create POJO or bind the schema and generate the classes. 
    2.Create the JAXBContext object. 
    3.Create the Unmarshaller objects. 
    4.Call the unmarshal method. 
    5.Use getter methods of POJO to access the data.