2016-11-17 2 views
0

XML 파일에 객체를 쓰는 간단한 Java 프로그램이 있는데 문제는 XML 파일에 객체 1 개를 저장할 수 있다는 것입니다.XML 파일에 여러 객체 저장

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

    @XmlRootElement 
    public class Product { 

     String Name; 
     int Price; 

     @XmlElement 
     public void setName(String Name) { 
      this.Name = Name; 
     } 

     @XmlElement 
     public void setPrice(int price) { 
      this.price = price; 
     } 
    } 
import xml.Product; 
import java.io.File; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 

    public class XML { 


     public static void main(String[] args) { 

      Product product=new Product(); 
      product.setName("Hamburger"); 
      product.setPrice(10); 

      try{ 
       //File file = new File("C:\\file.xml"); 
       JAXBContext jaxbContext = JAXBContext.newInstance(Product.class); 
       Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

       // output pretty printed 
       jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

       jaxbMarshaller.marshal(product, file); 
       jaxbMarshaller.marshal(product, System.out); 
      }catch(JAXBException e){ 
       e.printStackTrace(); 
      } 

     } 
     } 

을 다음하지만 예 2 개 제품은, 내가 XML 파일에 하나의 개체를 얻을 경우에도 (정확하게 기록 된)로 내 코드

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<Product> 
    <Name>Hamburger</Name> 
    <price>10</price> 
</Product> 

답변

0

당신은 예를 들어 제품의 목록을 사용하여이 문제를 해결할 수

다음

Marshalling a list of products

Product.java이 리팩토링이다 :이하는 제품 엔티티를 생성 이제

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlRootElement; 

@XmlRootElement(name = "product") 
@XmlAccessorType (XmlAccessType.FIELD) 
public class Product { 
    private String Name; 
    private int price; 

    public String getName() { 
     return Name; 
    } 

    public int getPrice() { 
     return price; 
    } 

    public void setName(String Name) { 
     this.Name = Name; 
    } 

    public void setPrice(int price) { 
     this.price = price; 
    } 
} 

을 형식의 목록 List

(210)

그리고 마지막으로 데모 : 그래서

import java.io.File; 
import java.util.ArrayList; 
import javax.xml.bind.JAXBContext; 
import javax.xml.bind.JAXBException; 
import javax.xml.bind.Marshaller; 

public class ProductsDump { 
    static Products products = new Products(); 
    static 
    { 
     products.setProducts(new ArrayList<>()); 
     Product prod1 = new Product(); 
     prod1.setName("Hamburger"); 
     prod1.setPrice(10); 
     Product prod2 = new Product(); 
     prod2.setName("Bretzel"); 
     prod2.setPrice(5); 
     products.getProducts().add(prod1); 
     products.getProducts().add(prod2); 
    } 
    private static void marshalingExample() throws JAXBException 
    { 
     JAXBContext jaxbContext = JAXBContext.newInstance(Products.class); 
     Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

     jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 

     //Marshal the products list in console 
     jaxbMarshaller.marshal(products, System.out); 

     //Marshal the products list in file 
     jaxbMarshaller.marshal(products, new File("c:/products.xml")); 
    } 

    public static void main(String[] args) throws Exception { 
     marshalingExample(); 
    } 
} 
+0

ahh thanks man! 나는 그것을 시도하고 효과가! 나는 결코 그것을리스트에 넣지 않았다. 나는 XML 파일에 대해 처음으로 익숙하다. 그래서 나는 지금 약간 잃는다. – Twhite1195

+0

당신은 환영한다 !!! S.O에 계속 오면 괜찮을거야. – alainlompo

+0

고마워! 이것은 정말로 조언을 찾아 답변을 얻는 가장 좋은 장소입니다! – Twhite1195

0

흠, 이것은 가지처럼 간다 그것이 꽂혀 있는지 물어 보지만, 당신의 예제에만있는 것이 있습니다. 어떤 종류의 목록이 필요합니다. 제품을 목록에 추가 한 다음 목록을 직렬화하십시오.

또한 XStream을 살펴보면 xml 비트를 처리 할 수 ​​있으며 javax 요소를 다룰 필요가 없습니다. 그것은 당신과 당신을 위해 XML에서 serialize합니다.

+0

, 나는 목록 에 개체를 추가 한 다음 해당 XML 파일에 목록 내부의 각 개체를 작성해야? – Twhite1195