이전 정리에서는 XmlReader 클래스로 XML문서를 읽어 오거나 문자열을 읽어와 그 것의 노드를 읽어가며 값을

검색해서 출력했다.

 

이번에는 XmlWriter 클래스를 이용해서 지정된 경로에 XML문서 파일을 하나 생성해보겠다.

 

 

private void btnXmlWriter01_Click(object sender, EventArgs e)
{
string imgPath = @"..\..\images\naver.gif";
FileStream fs = new FileStream(imgPath, FileMode.Open);
int count=(int) fs.Length;//이미지 바이트 수
byte[] buffer = new byte[count];
fs.Read(buffer, 0, count);//0번째부터 갯수만큼 버퍼에 담아두겠다.
fs.Close();
string path = @"c:\wbooklist.xml";
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.UTF8;
settings.Indent = true;//들여쓰기

XmlWriter writer = XmlWriter.Create(path, settings);
writer.WriteStartDocument();

writer.WriteDocType("booklist", null, "booklist.dtd",null);


//PI
writer.WriteProcessingInstruction("xml-stylesheet", "type='text/xsl' href=Ex48.xslt'");


writer.WriteComment("booklist 선언부분");
//==> <booklist>
writer.WriteStartElement("bml","booklist","http://tempuri.org/booklist.xsd");//네임스페이스
writer.WriteComment("booklist 선언부분");
//<book>
writer.WriteStartElement("book");
//id,kind속성추가
writer.WriteAttributeString("id", "b001");
writer.WriteAttributeString("kind", "컴퓨터");
//<title>
writer.WriteStartElement("title");
writer.WriteString("Java 기초");
//</title>
writer.WriteEndElement();
//author :홍길동
writer.WriteElementString("author", "홍길동");//
//description
writer.WriteStartElement("description");
writer.WriteCData("<xml>교재 샘플!");
writer.WriteEndElement();

//img
writer.WriteStartElement("img");
//writer.WriteString("naver.gif");
writer.WriteBase64(buffer, 0, buffer.Length);
writer.WriteEndElement();

//</book>
writer.WriteEndElement();
//==> </booklist>
writer.WriteEndElement();


writer.WriteEndDocument();
writer.Close();
}

img파일을 바이트 배열인 buffer에 담아두고 밑에 img엘리먼트 선언 부분에서 값으로 넣을 것이다.

settings.Encoding = Encoding.UTF8;은인코딩 방식을 UTF8방식으로 쓰겠다 이며
settings.Indent = true;은 들여쓰기 사용 여부이다.

 

XmlWriter의 Create로 객체를 생성 할때 인자로 XML파일이 생길 위치와 생성할 때의 설정값인 settings를 넣어줘서 생성한다.

 

WirteStartDocument()은 XML문서에서

<?xml version="1.0" encoding="utf-8" ?>즉 declaration에 해당하는 부분으로 문서의 시작부임을 명시적으로 알린다. 생략도 가능하다.

 

WriteDOcType() 은 XML문서에서

<!DOCTYPE booklist SYSTEM "booklist.dtd"?/>에 해당하는 부분이다.

WriteProcessingInstruction()은 프로세싱 지시자를 말한다.

 

WriteComment ()주석을 만드는 함 수 이다.

 

WriteStartElement()엘리먼트의 시작을 나타내며 WriteEndElement()엘리먼트가 닫히기 전에 WriteStartElement()이 나오면 자식으로 인식하고 WriteAttributeString()가 나오면 속성이 된다.(스샷을 보면 이해가 됨)

주황색처럼 선언하게 되면 첫번째 인자는 접두사가 되고, 두번재 인자는 엘리먼트 명 , 세번째 인자는 네임스페이스 포함해서 선언하게 된다.

 

WriteString()함수를 사용해서 태그 사이에 값(innerText)을 설정해 준다.

 

WirteCData() <![CDATA[<xml>교재 샘플!]]>부분에 해당하는 것으로 대괄로 내부의 내용은 XML에서 태그로 인식하지 않는 부분이다.

WriteBase64() 지정된 이진 바이트를 Base64로 인코딩하고 결과 텍스트를 작성한다.

 

WriteEndDocument()로 문서의 끝을 명시적으로 끝내고, Close()로 writer객체를 닫는다.

 

결과값

 

 

 

 

+ Recent posts