XmlReader에서 DTD를 사용하여 유효성 검사
업데이트: November 2007
W3C(World Wide Web 컨소시엄) XML(Extensible Markup Language) 1.0 권장 사항에 정의된 유효성 제약 조건을 사용하여 DTD(문서 종류 정의) 유효성 검사를 구현합니다. DTD에서는 정식 문법을 사용하여 XML 규격 문서의 구조와 구문을 설명하며 표준 XML 문서에 허용된 내용과 값을 지정합니다.
DTD에 대한 유효성 검사를 수행하기 위해 XmlReader에서는 XML 문서의 DOCTYPE 선언에 정의된 DTD를 사용합니다. DOCTYPE 선언은 인라인 DTD를 가리키거나 외부 DTD 파일에 대한 참조가 될 수 있습니다.
XmlReaderSettings.ProhibitDtd 속성을 false로 설정합니다.
XmlReaderSettings.ValidationType 속성을 ValidationType.DTD로 설정합니다.
DTD가 인증이 필요한 네트워크 리소스에 저장된 외부 파일인 경우 필요한 자격 증명과 함께 XmlResolver 개체를 Create 메서드에 전달합니다.
예제
다음 예제에서는 DTD 파일을 사용하여 XML 파일의 유효성을 검사합니다.
Imports System
Imports System.Xml
Imports System.Xml.Schema
Imports System.IO
public class Sample
public shared sub Main()
' Set the validation settings.
Dim settings as XmlReaderSettings = new XmlReaderSettings()
settings.ProhibitDtd = false
settings.ValidationType = ValidationType.DTD
AddHandler settings.ValidationEventHandler, AddressOf ValidationCallBack
' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("itemDTD.xml", settings)
' Parse the file.
while reader.Read()
end while
end sub
' Display any validation errors.
private shared sub ValidationCallBack(sender as object, e as ValidationEventArgs)
Console.WriteLine("Validation Error: {0}", e.Message)
end sub
end class
using System;
using System.Xml;
using System.Xml.Schema;
using System.IO;
public class Sample {
public static void Main() {
// Set the validation settings.
XmlReaderSettings settings = new XmlReaderSettings();
settings.ProhibitDtd = false;
settings.ValidationType = ValidationType.DTD;
settings.ValidationEventHandler += new ValidationEventHandler (ValidationCallBack);
// Create the XmlReader object.
XmlReader reader = XmlReader.Create("itemDTD.xml", settings);
// Parse the file.
while (reader.Read());
}
// Display any validation errors.
private static void ValidationCallBack(object sender, ValidationEventArgs e) {
Console.WriteLine("Validation Error: {0}", e.Message);
}
}
#using <System.Xml.dll>
using namespace System;
using namespace System::Xml;
using namespace System::Xml::Schema;
using namespace System::IO;
// Display any validation errors.
static void ValidationCallBack( Object^ /*sender*/, ValidationEventArgs^ e )
{
Console::WriteLine( L"Validation Error: {0}", e->Message );
}
int main()
{
// Set the validation settings.
XmlReaderSettings^ settings = gcnew XmlReaderSettings;
settings->ProhibitDtd = false;
settings->ValidationType = ValidationType::DTD;
settings->ValidationEventHandler += gcnew ValidationEventHandler( ValidationCallBack );
// Create the XmlReader object.
XmlReader^ reader = XmlReader::Create( L"itemDTD.xml", settings );
// Parse the file.
while ( reader->Read() )
;
return 1;
}
입력
이 예제에서는 itemDTD.xml 파일을 입력으로 사용합니다.
<!--XML file using a DTD-->
<!DOCTYPE store [
<!ELEMENT store (item)*>
<!ELEMENT item (name,dept,price)>
<!ATTLIST item type CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>]>
<store>
<item type="supplies" ISBN="2-3631-4">
<name>paint</name>
<price>16.95</price>
</item>
</store>