본문 바로가기
개발언어/C#.NET

c# xml read XmlTextReader 작성예제 및 richtextbox font color 지정하기 xml 한글 깨지는 현상 처리

by 엔돌슨 2011. 7. 27.
반응형

xml reader 와 richtext font color 지정하기


C#에서 xml문서를 읽고 원하는 데이타를 추출하는 프로그램을 만들었습니다. XmlTextReader 을 이용하여 xml을 읽고 해당 tagname을 찾아 출력하는 간단한 예제입니다. 또한 richtextbox에 font을 이용하여 원하는 색상을 지정하여 출력합니다. richtextbox의 확장 클래스를 만들어 색상지정과 폰트속성을 지정합니다. 공지사항을 띄울때 쓸 xml reader 프로그램인데 아직 데모입니다. 추후 개선할 사항이 나오면 더 수정하여야 하겠지만 xml reader할 경우 문제가 없을 거 같습니다. 참고로 xml에서 한글을 읽어 들일 때 깨지는 부분도 처리되어 있으니 확인하시면 됩니다.




Xml Reader v0.1 첨부파일을 참고하세요.


Xml 문서읽기 코드


xml 문서를 읽어 오는 부분입니다. 한글 깨지는 인코딩 부분도 처리되어 있습니다. 
/// <summary>
/// XML 파일 읽기
/// </summary>
private void ReadXML()
{
// 한글 깨지는 인코딩 부분 때문에 아래와 같이 처리합니다.
 FileStream fStream = new FileStream("books.xml", FileMode.Open);
 System.Text.Encoding enc = System.Text.Encoding.Default;
 XmlParserContext context = new XmlParserContext(null, null, null, XmlSpace.Default, enc);
 XmlTextReader textReader = new XmlTextReader(fStream, XmlNodeType.Element, context);

 string tagname = "";
 while (textReader.Read())
 {
  switch (textReader.NodeType)
  {
   case XmlNodeType.Element:
    tagname = textReader.Name;
    break;
   case XmlNodeType.Text:
    if (tagname.Equals("date"))
    {
     rBox.AppendText(string.Concat(textReader.Value.ToString(),"  \r\n"), Color.Red);
    }
    if (tagname.Equals("title"))
    {
     rBox.AppendText(string.Concat("내역: ", textReader.Value.ToString(), "  \r\n"), Color.Blue);
    }
    if (tagname.Equals("note"))
    {
     rBox.AppendText(string.Concat("상세내역: ", textReader.Value.ToString(), "  \r\n\r\n"), Color.Green);
    }
    break;
   case XmlNodeType.EndElement:
    //rBox.Text += textReader.Name.ToString() + "  \r\n";
    break;
  }
 }
 textReader.Close();
}
}



 

RichTextBox의 색상 지정 확장클래스


RichTextBox 색상을 지정합니다.


#region RichTextBoxExtensions
public static class RichTextBoxExtensions
{
 public static void AppendText(this RichTextBox box, string text, Color color)
 {
  box.SelectionStart = box.TextLength;
  box.SelectionLength = 0;
  box.SelectionColor = color;
  box.AppendText(text);
  box.SelectionColor = box.ForeColor;
 }

 public static void AppendText(this RichTextBox box, string text, Color color, FontStyle fontstyle)
 {
  box.SelectionStart = box.TextLength;
  box.SelectionLength = 0;
  box.SelectionColor = color;
  box.AppendText(text);
  box.SelectionColor = box.ForeColor;
  Font currentFont = box.SelectionFont;
  FontStyle newFontStyle = fontstyle;
  box.SelectionFont = new Font(currentFont.FontFamily, currentFont.Size, newFontStyle);
 }
}
#endregion





XML 문서 예제


xml 문서의 예제입니다.

<?xml version="1.0" encoding="utf-8" ?>
<!-- 메신져 공지사항 및 업데이트 내역을 작성합니다. -->
<messenger>
 <notice>
   <date>2011년07월27일</date>   
   <title>로그인시 조직도 속도개선</title>
   <note>웹서비스의 속도개선</note>
 </notice>
  <notice>
   <date>2011년07월25일</date>   
   <title>상단메뉴 기능 추가</title>
   <note>alt키를 누르면 숨겨져 있던 메뉴가 나옵니다</note>
 </notice>
</messenger>