Language/Java

[JAXB] XML 읽기, 쓰기 (생성, 수정)

OIZTLOMO 2012. 2. 22. 09:23

1. JAXB datasets.xml 읽기.

/**

 * JAXB - datasets.xml data 읽기

 */

public Datasets readXml() {

Datasets datasets = null;

try {

JAXBContext jaxbContext = JAXBContext.newInstance("com.fdi.jaxb.xml.datasets");

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

datasets = (Datasets) unmarshaller.unmarshal(new File("d:/datasets.xml"));

List<DatasetComplexType> list_dct = datasets.getDataset();

for (DatasetComplexType dct : list_dct) {

System.out.println("Name : " + dct.getName());

System.out.println("Type : " + dct.getType());

System.out.println("Scope: " + dct.getScope());

List<DatasetComplexType.Item> list_item = dct.getItem();

for (DatasetComplexType.Item item : list_item) {

System.out.println("Trim : " + item.getTrim());

System.out.println("Value: " + item.getValue());

System.out.println("Name : " + item.getName());

}

}

} catch (JAXBException e) {

e.printStackTrace();

} catch (Exception e) {

e.printStackTrace();

}

return datasets;

} 


2. JAXB datasets.xml 생성 및 수정.

2.1. datasets.xml 생성.


/**

 * Create new xml file which follows xml schema specified by the JAXB object.

 */

public void createXml() {

ObjectFactory objFactory = new ObjectFactory();

Datasets datasets = objFactory.createDatasets();


List<DatasetComplexType> list_dct = datasets.getDataset();


DatasetComplexType dct = objFactory.createDatasetComplexType();

dct.setName("DATASET_NAME");

dct.setScope("[0,10]");

dct.setType("RECORD");


list_dct.add(dct);


List<DatasetComplexType.Item> list_item = dct.getItem();


DatasetComplexType.Item item = null;//

// 임의로 Item 10개를 생성

for (int i = 0; i < 10; i++) {

item = objFactory.createDatasetComplexTypeItem();

item.setName("ITEM_NAME[" + i + "]");

item.setValue("ITEM_VALUE[" + i + "]");

list_item.add(item);

}


PrintWriter printWriter = null;

try {

printWriter = new PrintWriter(new FileWriter(new File("d:/datasets.xml")));


JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);

Marshaller marshaller = jaxbContext.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,new Boolean(true));

marshaller.marshal(datasets, printWriter);

} catch (IOException e) {

e.printStackTrace();

} catch (JAXBException e) {

e.printStackTrace();

} finally {

if (printWriter != null) try { printWriter.close(); } catch (Exception e) {}

}

} 


2.2. datasets.xml 수정.

  /**

 * update xml file.

 */

public void updateXml() {

Datasets datasets = readXml();

List<DatasetComplexType> list_dct = datasets.getDataset();

for(DatasetComplexType dct : list_dct) {

dct.getName();

dct.getScope();

dct.getType();

if("DATASET_NAME".equals(dct.getName())) {

dct.setScope("[0,250]");

dct.setType("ARRAY");

}

List<DatasetComplexType.Item> list_item = dct.getItem();

ObjectFactory objFactory = new ObjectFactory();

Item item = objFactory.createDatasetComplexTypeItem();

item.setName("TEST001");

item.setValue("TESTVAL001");

item.setTrim("N");

list_item.add(item);

}

PrintWriter printWriter = null;

try {

printWriter = new PrintWriter(new FileWriter(new File("d:/datasets.xml")));


JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);

Marshaller marshaller = jaxbContext.createMarshaller();

marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");

marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,new Boolean(true));

marshaller.marshal(datasets, printWriter);

} catch (IOException e) {

e.printStackTrace();

} catch (JAXBException e) {

e.printStackTrace();

} finally {

if (printWriter != null) try { printWriter.close(); } catch (Exception e) {}

}

}