프로그래밍 기술/XML.NET

[XML.NET] 11. XmlWriter 개체로 XML 데이터 작성(Attribte 쓰기)

언제나휴일 2016. 4. 18. 12:30
반응형

  XmlWriter 개체로 XML 데이터 작성(Attribte 쓰기)


 요소의 특성을 쓸 때는 WriteStartAttribute, WriteAttributeString, WriteAttributes 메서드를 이용합니다.

 

 WriteStartAttribute 메서드는 특성의 시작을 작성할 때 사용하는데 WriteEndAttribute 메서드를 이용하여 특성의 끝을 작성해야 합니다.

public void WriteStartAttribute (string name);

public void WriteStartAttribute (string name, string ns);

public void WriteStartAttribute (string prefix, string name, string ns);

public void WriteEndAttribute ( );

 

 WriteAttributeString 메서드를 이용하면 값이 있는 특성을 쉽게 작성할 수 있습니다.

public void WriteAttributeString (string name, string value);

public void WriteAttributeString (string name, string ns, string value);

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

 

 WriteAttributes 메서드를 이용하면 XmlReader의 현재 위치에 있는 모든 특성을 작성할 수 있습니다.

public void WriteAttributes (XmlReader reader, bool defattr);

 

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

 

 그리고 작성한 "data.xml" 파일을 소스 파일로 설정한 XmlReader 개체를 생성하고 Console.Out을 출력 파일로 설정한 XmlWriter 개체를 생성한 후에 XmlReader 개체의 Read 메서드를 반복하여 호출하여 읽어온 노드 타입이 요소일 때 XmlReader 개체의 현재 위치에 있는 모든 특성 정보를 WriteAttributes 메서드를 이용하여 출력하였습니다.

 

Program.cs


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.WriteStartAttribute("title"); //title 특성 쓰기

    writer.WriteString("XML.NET"); //title 특성 값 쓰기

    writer.WriteEndAttribute(); //title 특성 닫기

    writer.WriteStartAttribute("가격");//가격 특성 쓰기

    writer.WriteValue(12000); //가격 특성 값 쓰기

    writer.WriteEndAttribute(); //가격 특성 닫기

    writer.WriteEndElement(); //book 요소 닫기

 

    writer.WriteStartElement("book");//book 요소 쓰기

    writer.WriteAttributeString("title", "ADO.NET");//title 특성과 값 쓰기

    writer.WriteStartAttribute("가격");//가격 특성 쓰기

    writer.WriteValue(15000);//가격 특성 값 쓰기

    writer.WriteEndAttribute();//가격 특성 닫기

    writer.WriteEndElement();//book 요소 닫기

 

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

    writer.Close();

 

    XmlReader xreader = XmlReader.Create("data.xml"); //XmlReader 개체 생성

    XmlWriter xwriter = XmlWriter.Create(Console.Out,settings); //XmlWriter 개체 생성

    while (xreader.Read())

    {

        if (xreader.NodeType == XmlNodeType.Element)

        {

            xwriter.WriteStartElement(xreader.Name);

            xwriter.WriteAttributes(xreader, false); //xreader의 현재 특성을 쓰기

            if (xreader.IsEmptyElement)

            {

                xwriter.WriteEndElement();

            }

        }

        else if (xreader.NodeType == XmlNodeType.EndElement)

        {

            xwriter.WriteEndElement();

        }

    }

    xwriter.Close();

    xreader.Close();

    Console.WriteLine();

 }

[소스] XmlWriter 개체로 특성 쓰기 예제 코드

 

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

<!--XmlWriter 개체로 특성 쓰기-->

<books>

  <book title="XML.NET" 가격="12000" />

  <book title="ADO.NET" 가격="15000" />

</books>

[문서XmlWriter 개체로 특성 쓰기 예제를 실행했을 때 만들어지는 "data.xml" 파일 내용

 

XmlWriter 개체로 특성 쓰기 예제를 실행

[그림] 실행 화면

반응형