2016-07-14 13 views
0

HashMapからXMLファイルを作成しようとしています。ハッシュの各キーについて、私はXMLファイルが必要です。キーの値は、オブジェクトのArrayListです。私はJAXBを使用していますが、XMLファイルは生成されません。出力はXML有効ではありません。Javaのハッシュマップから複数のXMLファイルを作成する

オブジェクトクラス:

import javax.xml.bind.annotation.XmlElement; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name = "Product") 
public class Product implements Comparable<Product>{ 
    String ID,description, gtin; 
    double price; 
    String date; 
    Product() 
    { 

    } 
    public String toString() 
    { 
     return ID+" "+description+" "+gtin+" "+price+" "+date; 
    } 
    public String getID() { 
     return ID; 
    } 
    @XmlElement 
    public void setID(String ID) { 
     this.ID = ID; 
    } 

    public String getDescription() { 
     return description; 
    } 
    @XmlElement 
    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getGtin() { 
     return gtin; 
    } 
    @XmlElement 
    public void setGtin(String gtin) { 
     this.gtin = gtin; 
    } 

    public double getPrice() { 
     return price; 
    } 
    @XmlElement 
    public void setPrice(Double price) { 
     this.price = price; 
    } 
} 

私はXMLSを作成しようとするクラス:

import java.io.File; 
    import java.util.ArrayList; 
    import java.util.HashMap; 
    import java.util.Iterator; 
    import java.util.Set; 

    import javax.xml.bind.JAXBContext; 
    import javax.xml.bind.JAXBException; 
    import javax.xml.bind.Marshaller; 

    public class CreateXML { 
     static void create(HashMap<String, ArrayList<Product> > map) { 

      try { 

       JAXBContext jaxbContext = JAXBContext.newInstance(ProdsList.class); 
       Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

       jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
       Set setOfKeys = map.keySet(); 
       Iterator iterator = setOfKeys.iterator(); 
      while (iterator.hasNext()) { 
      String keys = (String) iterator.next(); 
      String filename= "C:\\Users\\As\\Desktop\\Sups\\"+keys+22+".xml"; 
      File file = new File(filename); 
       ArrayList<Product> value = map.get(keys); 
      jaxbMarshaller.marshal(value, file); 
      jaxbMarshaller.marshal(value, System.out); 
      } 
       } catch (JAXBException e) { 
      e.printStackTrace(); 
       } 

     } 
    } 

XMLのルートのためのクラス:

import java.util.*; 

    import javax.xml.bind.annotation.XmlAccessorType; 
    import javax.xml.bind.annotation.XmlElement; 
    import javax.xml.bind.annotation.XmlRootElement; 
    import javax.xml.bind.annotation.XmlSeeAlso; 


    //@XmlAccessorType(XmlAccessType.FIELD) 
    @XmlRootElement(name="Products") 
    //@XmlSeeAlso({ArrayList.class}) 
    class ProdsList { 

     @XmlElement(name="Product") 
     ArrayList<Product> prods; 

     public ProdsList(){ 
       prods=new ArrayList<Product>(); 
      } 
     public ArrayList<Product> getProducts() { 
      return prods; 
     } 

     public void setProducts(ArrayList<Product> prods) { 
      this.prods = prods; 
     } 
    } 

どのようにすることができます私はこれを修正する。前もって感謝します。

+0

へ「出力はXML有効ではありません。」あなたはどのように伝えることができますか? – VGR

答えて

1

ProdsListのインスタンスをマーシャリングする必要があります。代わりに、 製品のArrayListを整列しようとしています。

変更

jaxbMarshaller.marshal(value, file); 
jaxbMarshaller.marshal(value, System.out); 

jaxbMarshaller.marshal(new ProdsList(value), file); 
jaxbMarshaller.marshal(new ProdsList(value), System.out); 
関連する問題