DTD유효성 검사하기

<?xml version="1.0" encoding="utf-8" ?>
<!--<!DOCTYPE booklist SYSTEM "booklist.dtd">-->
<booklist>
<book id="b001" kind="컴퓨터">
<title>C#</title>
<author>홍길동</author>
<price unit="원">25000</price>
<writer>사람</writer>
</book>
<book id="b002" kind="컴퓨터">
<title>XML.NET</title>
<author>유재성</author>
<price unit="달러">20000</price>
</book>
<book id="b003" kind="수필">
<title>무소유</title>
<author>법정</author>
<price unit="원">18000</price>
</book>
<book id="b004" kind="소설">
<title>무소뿔처럼 혼자서 가라</title>
<author>홍길동</author>
<price unit="원">15000</price>
</book>
</booklist>

주석을 하고 안하고에 따라 유효성 검사 성공/실패가 바뀐다.

 

 

 

 

 

 

public bool vaild;
private void btnXmlReader03_Click(object sender, EventArgs e)
{
//DTD유효성 검사
XmlReaderSettings settings = new XmlReaderSettings();
//공백writespace무시
settings.IgnoreWhitespace = true;


//DTD 유효한 문서인지 체크
settings.DtdProcessing = DtdProcessing.Parse;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new System.Xml.Schema.ValidationEventHandler(settings_ValidationEventHandler);

XmlReader reader = XmlReader.Create(this.uri, settings);
this.vaild = true;
while (reader.Read())
{
}
reader.Close();
if (this.vaild)
MessageBox.Show(">>유효한문서입니다");
}

XmlReaderSettings 개체를 만들어 읽기 작업을 할때 필요한 필터링?을 셋팅한다.

DTD가 참조된 모든 XML문서는 반드시 settings.DtdProcessing = DtdProcessing.Parse;
을 해줘야 한다. 그렇지 않으면 에러가 난다.

 

이때 ValidationEventHandler 로 유효하지 않은 이벤트가 발생하면 이벤트 핸들러로 처리할 수 있도록 설정한다.

 

void settings_ValidationEventHandler(object sender, System.Xml.Schema.ValidationEventArgs e)
{
MessageBox.Show("DTD 검사 유효하지 않은 문서입니다\n"+e.ToString());
this.vaild = false;
}

 

+ Recent posts