1

次の xml ライターが製品配列リストに保存されない理由がわかりません。代わりに、私のプログラムはリストに何も追加せず、デバッガーを使用すると、配列リスト製品の値が常に「サイズ = 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

開始タグに nameProductがある場合、対応する終了タグProductが有効な xml である必要があります。そのため、変更する必要があります

if(elementName.equals("product"))

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

望ましい動作を見たい場合。

于 2013-05-10T05:43:13.367 に答える