.net下用dtd文档验证xml
还是在微软技术支持中心找到答案.
1.创建book.xml文件,dtd也可以另存为一个文件,xml文件里面加上dtd路径就可以了
<!DOCTYPE Product SYSTEM "book.dtd">
<!DOCTYPE bookstore [
<!ELEMENT bookstore (book)*>
<!ELEMENT book (title,author,price)>
<!ATTLIST book genre CDATA #REQUIRED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>]>
<bookstore>
<book genre="fantasy" ISBN="2-3631-4">
<title>Oberon's Legacy</title>
<author>Corets, Eva</author>
<price>5.95</price>
</book>
</bookstore>
2.生成C#验证代码
public bool Validate(string filename)
{
//省略了验证出错处理 直接在当前代码段处理即可
// System.Xml.Schema.ValidationEventHandler eventHandler = new System.Xml.Schema.ValidationEventHandler(MyValidationEventHandler);
System.Xml.XmlReader reader = null;
try
{
// 声明验证变量
System.Xml.XmlReaderSettings settings = new System.Xml.XmlReaderSettings();
settings.ProhibitDtd = false;//允许dtd验证 设为true会产生异常
//验证类型设为DTD 如果不需要验证可以设为ValidationType.None
settings.ValidationType = System.Xml.ValidationType.DTD;
//settings.ValidationEventHandler += eventHandler;
//创建xml读取变量
reader = System.Xml.XmlReader.Create(Server.MapPath(filename), settings);
// 将reader赋值给XmlDocument,方便处理,xmlreader本身处理能力很弱,如其名,只能读
// 验证失败将会引发一个validation异常
// 然而数据还是读到了XmlDocument里面的,仍然可以处理
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(reader); }
catch(System.Xml.XmlException e)
{
Response.Write(e.Message);
return false;
}
catch(System.Xml.Schema.XmlSchemaException e)
{
Response.Write(e.Message);
return false;
}
finally
{
if (reader != null) reader.Close();
}
return true;
}

浙公网安备 33010602011771号