C# XmlWriter로 XML 데이터 작성하기

C# XmlWriter를 이용하면 C#에서 XML 데이터를 손쉽게 작성할 수 있습니다. 이를 통해 빠르고 캐시되지 않는 방식으로 XML 스트림이나 파일을 생성할 수 있습니다.
이번 포스팅에서는 예제 중심으로 XmlWriter를 사용하여 C#에서 XML 데이터를 작성하는 방법에 대해 알아보겠습니다.

XmlWriter란?

XmlWriter는 XML 데이터를 생성하기 위한 C#의 클래스입니다. 이 클래스는 XML 데이터를 스트림이나 파일로 생성할 수 있는 빠르고 효율적인 방법을 제공합니다. XmlWriter는 System.Xml 네임스페이스에서 제공되며 사용하기 매우 간단합니다.

XmlReader 에 관한 글은 다음글을 참조 하시면 됩니다.

C# XmlWriter 예제

다음 예제는 간단한 C# XmlWriter를 생성합니다.

using System.Xml;

class Program
{
    static void Main()
    {
        var setting = new XmlWriterSettings()
        {
            Indent = true,
        };

        using XmlWriter writer = XmlWriter.Create("data.xml", setting);

        writer.WriteStartDocument();

        writer.WriteStartElement("value");
        writer.WriteValue("HaroStudio");
        writer.WriteEndElement();

        writer.WriteEndDocument();

        Console.WriteLine("XML 문서가 생성되었습니다.");
    }
}

우리는 새 XML 문서를 생성합니다. 이 문서에는 XML 선언과 단일 XML 태그가 포함되어 있습니다.

var setting = new XmlWriterSettings()
{
    Indent = true,
};

using XmlWriter writer = XmlWriter.Create("data.xml", setting);

XmlWriter는 Create 메서드를 사용하여 생성됩니다. 우리는 문서의 이름과 설정을 메서드에 전달합니다.

writer.WriteStartDocument();

WriteStartDocument 메서드는 새 문서를 시작합니다.

writer.WriteStartElement("value");
writer.WriteValue(HaroStudio); 
writer.WriteEndElement();

WriteStartElement 및 WriteEndElement 쌍은 문서에 새 요소를 추가하는 데 사용됩니다. WriteValue는 단일 간단한 유형의 값을 작성합니다.

writer.WriteEndDocument();

WriteEndDocument는 열린 요소나 속성을 닫고 작성기를 시작 상태로 돌려 놓습니다.

출력된 data.xml 은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8"?>
<value>HaroStudio</value>

C# XmlWriter 예제 II

다음 예제는 두 개의 책이 포함된 XML 파일을 생성합니다.

using System.Xml;

class Program
{
    static void Main()
    {
        var setting = new XmlWriterSettings()
        {
            Indent = true,
        };

        using var writer = XmlWriter.Create("books.xml", setting);

        writer.WriteStartDocument();
        writer.WriteStartElement("bookstore");

        writer.WriteStartElement("book");
        writer.WriteAttributeString("genre", "Computer");

        writer.WriteStartElement("title");
        writer.WriteString("XML Developer's Guide");
        writer.WriteEndElement();

        writer.WriteStartElement("author");
        writer.WriteString("Gambardella, Matthew");
        writer.WriteEndElement();

        writer.WriteStartElement("price");
        writer.WriteString("44.99");
        writer.WriteEndElement();

        writer.WriteEndElement(); // book 끝

        writer.WriteStartElement("book");
        writer.WriteAttributeString("genre", "Fantasy");

        writer.WriteStartElement("title");
        writer.WriteString("Midnight Rain");
        writer.WriteEndElement();

        writer.WriteStartElement("author");
        writer.WriteString("Ralls, Kim");
        writer.WriteEndElement();

        writer.WriteStartElement("price");
        writer.WriteString("59.0");
        writer.WriteEndElement();

        writer.WriteEndElement(); // book 끝
        writer.WriteEndDocument();

        Console.WriteLine("XML 문서가 생성되었습니다.");
    }
}

XML 태그 외에도 WriteAttributeString으로 속성을 생성합니다.

<bookstore>
    <book genre='Computer'>
        <title>XML Developer's Guide</title>
        <author>Gambardella, Matthew</author>
        <price>44.99</price>
    </book>
    <book genre='Fantasy'>
        <title>Midnight Rain</title>
        <author>Ralls, Kim</author>
        <price>59.0</price>
    </book>
</bookstore>

C# XmlWriter 예제 III

다음 예제는 제품이 포함된 XML 파일을 생성합니다.

using System.Xml;

class Program
{
    static void Main()
    {

        var 설정 = new XmlWriterSettings()
        {
            Indent = true,
        };

        using var writer = XmlWriter.Create("products.xml", 설정);

        var 제품목록 = new List<Product>
        {
            new Product(1, "제품 A", 12.2M),
            new Product(2, "제품 B", 11.3M),
            new Product(3, "제품 C", 9M),
            new Product(4, "제품 D", 5.6M),
            new Product(5, "제품 E", 11.7M)
        };

        writer.WriteStartDocument();
        writer.WriteStartElement("products");

        foreach (var 제품 in 제품목록)
        {
            writer.WriteStartElement("product");

            writer.WriteStartElement("id");
            writer.WriteValue(제품.id);
            writer.WriteEndElement();

            writer.WriteStartElement("name");
            writer.WriteValue(제품.name);
            writer.WriteEndElement();

            writer.WriteStartElement("price");
            writer.WriteValue(제품.price);
            writer.WriteEndElement();

            writer.WriteEndElement();  // 제품 끝
        }

        writer.WriteEndElement();
        writer.WriteEndDocument();

        Console.WriteLine("XML 문서가 생성되었습니다.");


    }
    record Product(int id, string name, decimal price);
}

C# 레코드 유형을 사용하여 제품 목록을 생성합니다. 목록을 순회하고 개체에서 XML 파일을 생성합니다.

<?xml version="1.0" encoding="utf-8"?>
<products>
  <product>
    <id>1</id>
    <name>제품 A</name>
    <price>12.2</price>
  </product>
  <product>
    <id>2</id>
    <name>제품 B</name>
    <price>11.3</price>
  </product>
  <product>
    <id>3</id>
    <name>제품 C</name>
    <price>9</price>
  </product>
  <product>
    <id>4</id>
    <name>제품 D</name>
    <price>5.6</price>
  </product>
  <product>
    <id>5</id>
    <name>제품 E</name>
    <price>11.7</price>
  </product>
</products>

결론

이와 같이 XmlWriter를 사용하면 간단한 XML 데이터를 생성할 수 있습니다. 또한 XmlWriter를 활용하여 XML 요소에 속성을 추가할 수도 있습니다. XmlWriter를 이용하면 C#에서 XML 데이터를 효율적으로 처리할 수 있습니다.

Leave a Comment