.net下用dtd文档验证xml

 .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;
    }






   

posted @ 2008-05-08 13:59  yycanton  阅读(415)  评论(0)    收藏  举报