读取XML文件中的数据并将其保存到数组中

时间:2013-05-10 05:36:18

标签: java xml file-io arraylist

我无法弄清楚为什么我的后续xml编写器没有保存到products数组列表中。相反,我的程序没有向列表添加任何内容并使用调试器我看到数组列表产品值始终是“size = 0”。我不确定为什么这个值没有改变,因为我试图将XML文件中的元素添加到列表中,这就是我的代码看起来像:

private static ArrayList<Product> readProducts()
{
    ArrayList<Product> products = new ArrayList<>();
    Product p = null;
    XMLInputFactory inputFactory = XMLInputFactory.newFactory();
    try
    {
        //create a stream reader object
        FileReader fileReader = new FileReader("products.xml");
        XMLStreamReader reader = inputFactory.createXMLStreamReader(fileReader);
        //read XML file
        while (reader.hasNext())
        {
          int eventType = reader.getEventType();
          switch (eventType)
          {
               case  XMLStreamConstants.START_ELEMENT :
                  String elementName = reader.getLocalName();
                  //get the product and its code
                  if (elementName.equals("Product"))
                  {
                     p = new Product();
                     String code = reader.getAttributeValue(0);
                     p.setCode(code);
                  }   
                  // get the product description
                  if (elementName.equals("Description"))
                  {
                     String description = reader.getElementText();
                     p.setDescription(description);
                  }    
                  // get the product price
                  if (elementName.equals("Price")) 
                  {

                      String priceS = reader.getElementText();
                      double price = Double.parseDouble(priceS);
                      p.setPrice(price);
                  }    
                  break;
               case XMLStreamConstants.END_ELEMENT :
                  elementName = reader.getLocalName();
                  if(elementName.equals("product"))
                  {
                    products.add(p);  
                  }    
                  break; 
              }
         reader.next();
        }    
    }
    catch (IOException | XMLStreamException e)
    {
      System.out.println(e); 
    }    
     return products;
    }

1 个答案:

答案 0 :(得分:3)

如果您的开始标记的名称为Product,则相应的结束标记必须为Product才能使其成为有效的xml。因此你需要改变

if(elementName.equals("product"))

if(elementName.equals("Product"))
                       ^

如果你想看到你想要的行为。