2012-07-03 18 views
5

मैं सरल एक्सएमएल (सरल-एक्सएमएल-2.6.2.jar) का उपयोग की तरह एक्सएमएल फ़ाइल को पार्स करने:सरल XML पार्स एक्सएमएल सूची में

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

जड़ तत्व उसके उप-तत्व शामिल हैं। मैं चाहता हूं कि यह ऐरेलिस्ट हो, यह कैसे करें?

उत्तर

0

सूची, एक अंतरफलक है ArrayList की तरह, इसके कार्यान्वयन में से एक है: तो अगर आप एक सूची है, तो आप मूल रूप से आप क्या चाहते है

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

+0

क्षमा करें, यह अर्थ से मेल नहीं है। मैं चाहता हूं कि परिणाम या ArrayList है, ऑर्डरलिस्ट.क्लास नहीं। – YETI

+0

आप अपनी रूट ऑब्जेक्ट ऑर्डरलिस्ट के बाद से नहीं कर सकते हैं। – Tomer

12

यहाँ एक संभव समाधान है, आशा है कि यह आप में मदद करता है:,

@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 
} 

Example वर्ग सूची से युक्त:

Order वर्ग के

एनोटेशन

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

    // ... 
} 

और पढ़ने के लिए यहां कुछ कोड है अपने कोड ing:

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

इसे उत्तर में @YETI – FarOoOosa

+0

उत्तर के रूप में चिह्नित किया जाना चाहिए: @ElementList (inline = true) – Kaito

+0

"ऑर्डरलिस्ट" के बजाय उदाहरण वर्ग पर @ रूट एनोटेशन में "elementList" होना चाहिए? – lustig

-1

मैं सही ढंग से अपने प्रश्न में व्याख्या की है, तो आप आदेश की एक सूची चाहते हैं। मैं अपने स्थापना के लिए इस परीक्षण नहीं किया है, लेकिन यह एक ऐसी ही एक्सएमएल संरचना के लिए मेरे लिए काम करता (मान लिया गया है आप एक कस्टम वर्ग कहा जाता है आदेश है):

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 i.e 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 ""; 
    } 
} 
संबंधित मुद्दे