2017-03-09 128 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.