1

我不明白为什么我的以下 xml 编写器没有保存到产品数组列表中。相反,我的程序没有向列表中添加任何内容,并且使用调试器我看到数组列表产品值始终为“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;
    }
4

1 回答 1

3

如果您的开始标签具有 name Product,则相应的结束标签必须Product是有效的 xml。因此你需要改变

if(elementName.equals("product"))

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

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

于 2013-05-10T05:43:13.367 回答