요소의 특성을 쓸 때는 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메서드를 이용하여 출력하였습니다.
using System; using System.Xml; namespace 예제_2._3_XmlWriter_개체로_특성_쓰기 { 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.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 개체 생성 XmlReader xreader = XmlReader.Create("data.xml"); //콘솔 출력으로 하는 XmlWriter 개체 생성 XmlWriter xwriter = XmlWriter.Create(Console.Out,settings); 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(); } } }
다음은 실행했을 때 만들어지는 “data.xml” 파일의 내용입니다.
<?xml version="1.0" encoding="utf-8"?> <!--XmlWriter 개체로 특성 쓰기--> <books> <book title="XML.NET" 가격="12000" /> <book title="ADO.NET" 가격="15000" /> </books>