1. class ValidateXML
  2. {
  3. public string ErrString = string.Empty;
  4. public void ValidationEventCallBack(Object sender, ValidationEventArgs e)
  5. {
  6. if (e.Severity == XmlSeverityType.Warning)//区分是警告还是错误
  7. {
  8. //Console.WriteLine("验证成功!警告:" + e.Message);
  9. ErrString += "验证成功!警告:" + e.Message;
  10. }
  11. else
  12. {
  13. // Console.WriteLine("验证失败");
  14. ErrString += "Err:" + e.Message;
  15. }
  16. }
  17.  
  18. public void CheckXmlValidate(string strRequestXML)
  19. {
  20. //string ErrString = string.Empty;
  21. StringReader sRead = null;
  22. XmlReader xmlRead = null;
  23. XmlSchemaSet schemaSet;
  24.  
  25. try
  26. {
  27. schemaSet = new XmlSchemaSet();
  28.  
  29. sRead = new StringReader(strRequestXML);
  30.  
  31. schemaSet.Add(null, @"MySchema.xsd");
  32.  
  33. XmlReaderSettings settings = new XmlReaderSettings();
  34. settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventCallBack);
  35. settings.ValidationType = ValidationType.Schema;
  36. settings.Schemas = schemaSet;
  37.  
  38. xmlRead = XmlReader.Create(sRead, settings);
  39. while (xmlRead.Read())
  40. {
  41.  
  42. }
  43.  
  44. if (ErrString.ToString() == String.Empty)
  45. {
  46.  
  47. Console.WriteLine("验证成功!");
  48. }
  49. else
  50. {
  51. Console.WriteLine("验证失败!原因可能是:" + ErrString);
  52. }
  53. }
  54. catch (XmlException exec)
  55. {
  56. Console.WriteLine(exec.Message);
  57. }
  58. finally
  59. {
  60.  
  61. if (xmlRead != null)
  62. {
  63.  
  64. xmlRead.Close();
  65. }
  66. }
  67. }
  68. }
  69.  
  70. public static void Main(string[] args)
  71. {
  72. ValidateXML vx = new ValidateXML();
  73. //StreamReader sr = new StreamReader(new FileStream(@"test.xml", FileMode.Open));
  74. vx.CheckXmlValidate(File.ReadAllText(@"test.xml"));
  75.  
  76. PressQtoQuit();
  77. }
  78.  
  79. public static void PressQtoQuit()
  80. {
  81. Console.WriteLine("Hit Q to exit");
  82. ConsoleKey key;
  83. do
  84. {
  85. key = Console.ReadKey().Key;
  86. } while (key != ConsoleKey.Q);
  87. }

C#中用schema验证xml的合法性的更多相关文章

  1. dskinlite(uieasy mfc界面库)使用记录1: schema验证xml

    市场上的MFC第三方库很多,最终选定dskinlite企业版,成熟度比较高,当然价格也略贵. 在2017年仍然使用MFC是有些另类,但特定场景很适用,也适合不愿转型的老程序员. 目前处于学习阶段,欢迎 ...

  2. DELPHI中调用XSD去验证XML的合法性

    procedure TFrmPrintReport.Button3Click(Sender: TObject);var  SchemaDoc, XmlDoc: IXMLDOMDocument2;  S ...

  3. Delphi 7验证XML合法性(利用DTD、XSD)

    拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML S ...

  4. XML Schema验证

    XML Schema验证 一.什么事Schema(XSD) XML Schema是微软定义的一套用来验证XML技术.是一套预先规定的XML元素和属性创建的,这些元素和属性定义了XML文档的结构和内容模 ...

  5. XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合法构建模块,类似 DTD,但更加强大. 作用有: ①定义 ...

  6. [讨论] Window XP 安装msxml6后,load xml时提示schema验证失败

    现象:在windows XP x64下,使用用户安装的msxml6库加载xml文件时失败. 进一步说明: 该xml文档使用了W3C的名称空间 xmlns:xsi= "http://www.w ...

  7. 28.XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式

    转自https://www.cnblogs.com/gdjlc/archive/2013/09/08/3308229.html XML Schema 语言也称作 XML Schema 定义(XML S ...

  8. 使用架构(XSD)验证XML文件

    假使说XML是一个数据库,那么XSD就是这个数据库的结构.由此可见,XSD是如此重要,如果没有它,我们如何声明以及验证我们需要的XML数据文件的格式和合法性呢?那是不可能完成的任务,如果你将XML数据 ...

  9. cvc-elt.1: Cannot find the declaration of element---与spring 无关的schema 验证失败

    晚上查了好久,都是spring 出这种问题的解决方式,终于查到为什么了. http://wakan.blog.51cto.com/59583/7218/ 转自这个人.. 多谢啦! 为了验证 XML 文 ...

随机推荐

  1. NSISの堆栈操作

    一 .堆栈 堆栈是 NSIS 维护的一堆数据,你可以根据需要往堆栈中存入任意大小的数据(as big as you like),所以你可以向堆栈中推入或读取数据,堆栈只有一个,堆栈遵守 LIFO (后 ...

  2. winform的常用公共控件和常用属性

    我们在学位winform的控件和属性的时候要学会赋值取值还有改值 公共控件: 1,Button(按钮): Enabled :是否可用 Visible:是否可见 2,CheckBox(多选项) Chec ...

  3. [问题2014A07] 复旦高等代数 I(14级)每周一题(第九教学周)

    [问题2014A07]  设 \(A\) 是有理数域 \(\mathbb{Q}\) 上的 4 阶方阵, \(\alpha_1,\alpha_2,\alpha_3,\alpha_4\) 是 \(\mat ...

  4. Flyweight

    1 意图:运用共享技术有效地大量支持细粒度的对象 2 动机:flyweight是一个共享对象,可以在多个场景使用. 分为内部状态和外部状态,内部状态存储于flyweight中,包含了独立于flywei ...

  5. ORACLE分页查询SQL语法——最高效的分页

    --1:无ORDER BY排序的写法.(效率最高)--(经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT  ...

  6. 新建web工程Jdk怎么不是自己安装的, 是自带的

    需要在eclipse中配置默认的jdk环境的,不要用它默认的那个,这个不能用的http://blog.csdn.net/clj198606061111/article/details/11881575 ...

  7. MyBatis中#,$的用法区别

    #可以防止SQL注入 $用在一些特殊的SQL语句例如 order by ${...} , desc/asc PS:大部分用#,一些特殊情况用$

  8. c-free

  9. python中main()函数写法

    顶顶大名的Guido van Rossum(Python之父)推荐的main写法: #!/usr/bin/python import sys import getopt class Usage(Exc ...

  10. oracle procedure

    http://www.cnblogs.com/wuhenke/archive/2010/03/20/1690535.html