Simple XML analiza XML a la lista

Utilizo XML simple (simple-xml-2.6.2.jar) para analizar el archivo del xml como:

<?xml version="1.0" encoding="UTF-8" ?> <orderList> <order id="1"> <name>NAME1</name> </order> <order id="2"> <name>NAME2</name> </order> </orderList> 

El elemento raíz contiene subElementos. Quiero que sea ArrayList, ¿Cómo hacerlo?

He aquí una posible solución, espero que te ayude:

Anotaciones de Clase de Order :

 @Root(name="order") public class Order { @Attribute(name="id", required=true) private int id; @Element(name="name", required=true) private String name; public Order(int id, String name) { this.id = id; this.name = name; } public Order() { } // Getter / Setter } 

Clase de Example , que contiene la lista:

 @Root(name="elementList") public class Example { @ElementList(required=true, inline=true) private List<Order> list = new ArrayList<>(); // ... } 

Y aquí hay un código para leer su código:

 Serializer ser = new Persister(); Example example = ser.read(Example.class, file); // file = your xml file // 'list' now contains all your Orders 

List es una interfaz, ArrayList es una de sus implementaciones, como:

 List<Order> l = new ArrayList<Order>() 

Así que si tienes una lista, básicamente tienes lo que quieres.

Si he interpretado correctamente su pregunta, desea una lista de órdenes. No he probado esto para su configuración, pero esto funciona para mí para una estructura xml similar (asume que tiene una clase personalizada llamada Orden):

 List<Order> orders = new ArrayList<Order>(); XMLDOMParser parser = new XMLDOMParser(); AssetManager manager = context.getAssets(); InputStream stream; try { stream = manager.open("test.xml"); //need full path to your file here - mine is stored in assets folder Document doc = parser.getDocument(stream); }catch(IOException ex){ System.out.printf("Error reading xml file %s\n", ex.getMessage()); } NodeList nodeList = doc.getElementsByTagName("order"); for (int i = 0; i < nodeList.getLength(); i++) { Element e = (Element) nodeList.item(i); //each order item Node order=nodeList.item(i); subList = order.getFirstChild(); //get the name child node orders.add(order); } //XMLDOMParser Class public class XMLDOMParser { //Returns the entire XML document public Document getDocument(InputStream inputStream) { Document document = null; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = factory.newDocumentBuilder(); InputSource inputSource = new InputSource(inputStream); document = db.parse(inputSource); } catch (ParserConfigurationException e) { Log.e("Error: ", e.getMessage()); return null; } catch (SAXException e) { Log.e("Error: ", e.getMessage()); return null; } catch (IOException e) { Log.e("Error: ", e.getMessage()); return null; } return document; } /* * I take a XML element and the tag name, look for the tag and get * the text content ie for <employee><name>Kumar</name></employee> * XML snippet if the Element points to employee node and tagName * is name I will return Kumar. Calls the private method * getTextNodeValue(node) which returns the text value, say in our * example Kumar. */ public String getValue(Element item, String name) { NodeList nodes = item.getElementsByTagName(name); return this.getTextNodeValue(nodes.item(0)); } private final String getTextNodeValue(Node node) { Node child; if (node != null) { if (node.hasChildNodes()) { child = node.getFirstChild(); while(child != null) { if (child.getNodeType() == Node.TEXT_NODE) { return child.getNodeValue(); } child = child.getNextSibling(); } } } return ""; } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.