[XML.NET] 10. XmlWriter 개체로 XML 데이터 작성(요소 쓰기)

 XmlWriter 개체는 XML 데이터를 작성할 때 사용할 수 있는 다양한 Write 메서드를 제공하고 있습니다.

 XmlWriter 개체에서 제공하는 Write 메서드의 종류에는 요소 쓰기, 특성 쓰기, 형식화된 데이터 쓰기 등이 있습니다.

 XmlWriter 개체를 이용하여 요소를 쓸 때는 WriteStartElement, WriteElementString, WriteNode 메서드를 호출합니다.

 WriteStartElement 메서드는 요소의 시작 태그를 쓸 때 사용합니다. 이 메서드를 이용하여 요소를 쓴 다음에는 요소의 끝을 쓰는 WriteEndElement 메서드를 호출해야 합니다.

public void WriteStartElement(string name);
public void WriteStartElement(string name, string ns);
public void WriteStartElement(string prefix, string name, string ns);
public void WriteEndElement();

  WriteElementString 메서드는 문자열 값을 갖는 요소를 쓸 때 사용합니다.

public void WriteElementString(string name, string value);
public void WriteElementString (string name, string ns, string value);
public void WriteElementString (string prefix, string name, string ns, string value);

 WriteNode 메서드는 XmlReader 개체 혹은 XPathNavigator 개체를 복사하여 쓰기 작업에 사용합니다.

public void WriteNode(XmlReader reader, bool defattr); //defattr: 기본 특성을 복사 여부
public void WriteNode(XPathNavigator navi, bool defattr);

 다음의 예제 코드는 세 가지 방법으로 요소 쓰기를 사용하는 예제입니다. 먼저 “data.xml” 파일을 출력 파일로 설정한 XmlWriter 개체를 생성하여 books 루트 요소를 쓰고 두 개의 자식 요소 book을 쓰기 작업합니다. 첫 번째 book 요소의 자식 요소인 title을 쓸 때는 WriteStartElement 메서드를 이용하였고 두 번째book 요소의 자식 요소인 title을 쓸 때는 WriteElementString 메서드를 이용하였습니다.

 그리고 작성한 “data.xml” 파일을 소스 파일로 설정한 XmlReader 개체를 생성하고 Console.Out을 출력 파일로 설정한 XmlWriter 개체를 생성한 후에XmlReader 개체를 이용하여 데이터를 복사하여 콘솔 화면에 출력할 때 WriteNode 메서드를 이용하였습니다.

using System;
using System.Xml;

namespace 예제_2._2_XmlWriter_개체로_요소_쓰기1
{
    class Program
    {
        static void Main(string[] args)
        {
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            XmlWriter writer = XmlWriter.Create("data.xml", settings);

            writer.WriteComment("XmlWriter 개체로 요소 쓰기");

            writer.WriteStartElement("books"); //루트 요소 쓰기

            writer.WriteStartElement("book");//book 요소 쓰기
            writer.WriteStartElement("title");//title 요소 쓰기
            writer.WriteName("XML.NET");
            writer.WriteEndElement();//title 요소 닫기
            writer.WriteStartElement("가격");//가격 요소 쓰기
            writer.WriteValue(12000);
            writer.WriteEndElement();//가격 요소 닫기
            writer.WriteEndElement();//book 요소 닫기

            writer.WriteStartElement("book");//book 요소 쓰기
            writer.WriteElementString("title","ADO.NET");//title 요소와 값 쓰기
            writer.WriteStartElement("가격");//가격 요소 쓰기
            writer.WriteValue(15000);
            writer.WriteEndElement();//가격 요소 닫기
            writer.WriteEndElement();//book 요소 닫기

            writer.WriteEndElement();//루트 요소 닫기

            writer.Close();

            //XmlReader 개체 생성
            XmlReader xreader = XmlReader.Create("data.xml"); 
            //콘솔 출력으로 하는 XmlWriter 개체 생성
            XmlWriter xwriter = XmlWriter.Create(Console.Out); 
            //xreader 개체로 읽어온 데이터를 xwriter 개체에 복사
            xwriter.WriteNode(xreader, false); 
            xwriter.Close();
            xreader.Close();

        }
    }
}

 다음은 실행했을 때 만들어지는 “data.xml” 파일의 내용입니다.

<?xml version="1.0" encoding="utf-8"?>
<!--XmlWriter 개체로 요소 쓰기-->
<books>
  <book>
    <title>XML.NET</title>
    <가격>12000</가격>
  </book>
  <book>
    <title>ADO.NET</title>
    <가격>15000</가격>
  </book>
</books>