본문 바로가기

Java SE/StaX, Write XML

Java StaX XML Writing example

StaX (Streaming API for XML) , XML Writing example


xml 태그와 값 그리고 속성을 설정하고 파일에 저장하는 예

import java.io.FileOutputStream;


import javax.xml.stream.XMLEventFactory;

import javax.xml.stream.XMLEventWriter;

import javax.xml.stream.XMLOutputFactory;

import javax.xml.stream.XMLStreamException;

import javax.xml.stream.events.Characters;

import javax.xml.stream.events.EndElement;

import javax.xml.stream.events.StartDocument;

import javax.xml.stream.events.StartElement;

import javax.xml.stream.events.XMLEvent;


public class StaXWriter {

  private String memFile;


  public static void main(String[] args) throws Exception {

 StaXWriter writer = new StaXWriter();

 writer.setFile("d:/test/members2.xml");

 writer.saveMembers();

 System.out.println("XML 파일쓰기 완료");

  }

  

  public void setFile(String memFile) {

    this.memFile = memFile;

  }


  public void saveMembers() throws Exception {

    // create an XMLOutputFactory

    XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();

    // create XMLEventWriter

    XMLEventWriter eventWriter = outputFactory

        .createXMLEventWriter(new FileOutputStream(memFile),"euc-kr");

    // create an EventFactory

    XMLEventFactory eventFactory = XMLEventFactory.newInstance();

    XMLEvent end = eventFactory.createDTD("\n");

    

    // create and write Start Tag

    StartDocument startDocument = eventFactory.createStartDocument("euc-kr","1.0");

    eventWriter.add(startDocument);


    // create members open tag

    StartElement memStartElement = 

    eventFactory.createStartElement("", "", "member");


    eventWriter.add(end);

    eventWriter.add(memStartElement);

    eventWriter.add(eventFactory.createAttribute("birth", "2002-12-05"));

    eventWriter.add(end);

    

    // Write the different nodes

    createNode(eventWriter, "name", "홍길동");

    createNode(eventWriter, "id", "10");

    createNode(eventWriter, "phone", "010-8479-6591");

    createNode(eventWriter, "email", "hong@naver.com");


    eventWriter.add(eventFactory.createEndElement("", "", "member"));

    eventWriter.add(end);

    eventWriter.add(eventFactory.createEndDocument());

    eventWriter.close();

  }


  private void createNode(XMLEventWriter eventWriter, String name,

      String value) throws XMLStreamException {


    XMLEventFactory eventFactory = XMLEventFactory.newInstance();

    XMLEvent end = eventFactory.createDTD("\n");

    XMLEvent tab = eventFactory.createDTD("\t");

    // create Start node

    StartElement sElement = eventFactory.createStartElement("", "", name);

    eventWriter.add(tab);

    eventWriter.add(sElement);

    // create Content

    Characters characters = eventFactory.createCharacters(value);

    eventWriter.add(characters);

    // create End node

    EndElement eElement = eventFactory.createEndElement("", "", name);

    eventWriter.add(eElement);

    eventWriter.add(end);


  }


}



위의 코드를 실행하면 아래와 같은 xml 파일이 생성됨
members2.xml
<?xml version="1.0" encoding="euc-kr"?>
<member birth="2002-12-05">
<name>홍길동</name>
<id>10</id>
<phone>010-8479-6591</phone>
<email>hong@naver.com</email>
</member>