验证xml是否符合指定xsd

xml是常用的一种数据文件格式,它的定义文件为Xml schema definition(XSD),那么怎么验证一个xml是否符合它的schema定义呢?

本文给出C#的代码实现。

样例XML

存储在xml.xml文件中

<?xml version="1.0" encoding="utf-8" ?>
<xml>
  <age>10</age>
  <date>2018-01-01</date>
  <regex>111</regex>
  <gMonth>---10--</gMonth>
  <language>english</language>
  <anyURI>./news.html</anyURI>
</xml>

样例xsd

存储在xsd.xsd文件中

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="xml">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="age">
          <xs:simpleType>
            <xs:restriction base="xs:decimal">
              <xs:enumeration value="10"/>
              <xs:enumeration value="20"/>
              <xs:enumeration value="30"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="date">
          <xs:simpleType>
            <xs:restriction base="xs:date">
              <xs:enumeration value="2018-01-01Z"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="regex">
          <xs:simpleType>
            <xs:restriction base="xs:string">
              <xs:pattern value="[0-9][0-9][0-9]"/>
            </xs:restriction>
          </xs:simpleType>
        </xs:element>
        <xs:element name="gMonth" type="xs:gMonth"/>
        <xs:element name="language" type="xs:language"/>
        <xs:element name="anyURI" type="xs:anyURI"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

# </xs:schema>

完整代码

下面代码在Console Project中实现

class Program
    {
        static void Main(string[] args)
        {
            string xmlFile = "xml.xml";
            string xsdFile = "xsd.xsd";

            var exceptionMessage = string.Empty;
            VerifyXML(xsdFile, xmlFile, ref exceptionMessage);

            Console.WriteLine(exceptionMessage);
            Console.ReadKey();
        }

        private static void VerifyXML(string xsdFile, string xmlFile, ref string exceptionMessage)
        {
            XmlDocument doc = LoadXML(xmlFile);
            doc.Schemas = LoadXMLSchmeFromXSDFile(xsdFile);

            string errorMessage = string.Empty;
            ValidationEventHandler eventHandler = new ValidationEventHandler(delegate (object sender, ValidationEventArgs e)
            {
                switch (e.Severity)
                {
                    case XmlSeverityType.Error:
                        errorMessage += e.Message;
                        break;
                    case XmlSeverityType.Warning:
                        break;
                }
            });

            doc.Validate(eventHandler);

            exceptionMessage = errorMessage;
        }

        private static XmlDocument LoadXML(string xmlFile)
        {
            XmlDocument doc = new XmlDocument();
            doc.Load(xmlFile);
            return doc;
        }

        private static XmlSchemaSet LoadXMLSchmeaFromXSDFile(string path)
        {
            var schemas = new XmlSchemaSet();
            schemas.Add("", XmlReader.Create(path));
            return schemas;
        }
    }

原文地址:http://blog.51cto.com/yuanzhitang/2064427

时间: 2024-08-30 06:26:54

验证xml是否符合指定xsd的相关文章

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

XSD(XML Schema Definition)用法实例介绍以及C#使用xsd文件验证XML格式 http://blog.csdn.net/gdjlc/article/details/11374787 2013-09-08 12:16 2824人阅读 评论(0) 收藏 举报 分类: XML(5) 版权声明:本文为博主原创文章,未经博主允许不得转载. XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD),作用是定义 XML 文档的合

C#使用xsd文件验证XML 格式是否正确

方法一: 我使用XmlReader来处理,因为觉得XmlReader简单点. 我自己做了个例子来说明,例子里的XML不是很复杂,没有子节点的. XML 文件(a.xml): <?xml version="1.0" encoding="utf-8" ?> <PROFILE> <PROFILEID>0001</PROFILEID> <DESCIPTION>我的内容</DESCIPTION> <

.Net中使用xsd验证xml文档

在.NET中使用XSD可以方便的验证一个XML文档是否符合规范.这里的XSD本质上是一个xml文件,XSD相当于数据库中的表结构或者C#语言中的一个抽象类,它规定了被验证的目标xml的结构,如目标xml具有哪些节点,每个节点的顺序关系,每个节点的数据类型,每个节点的出现次数等信息. .NET中通过XmlReader和XmlReaderSettrings类可以方便的对XML进行验证,示例代码如下: 1         static void Main(string[] args) 2 { 3 //

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

拥有正确语法的XML被称为“形式良好”的XML.通过DTD验证的XML是“合法”的XML.DTD(文档类型定义)的作用是定义XML 文档的合法构建模块.它使用一系列的合法元素来定义文档结构.XML Schema是基于XML的DTD替代者.XML Schema描述XML文档的结构.XML Schema语言也称作XML Schema定义(XML Schema Definition,XSD).        PowerDesigner是Sybase公司的CASE工具集,也可以用来设计XML模型.在这里

DTD验证XML文档

DTD验证XML文档        1.DTD简介:DTD是Document Type Definition的缩写,即文档定义            1.1:DTD的内容包含:                    元素定义规则                    元素之间的关系规则                    属性的定义规则            1.2:DTD的作用如下:                    DTD使每个XML文件可以携带一个自身格式的描述          

使用soapui验证XML

验证XML消息 采样器TestSteps收到的所有消息都内部转换为对应的XML,这为断言和其他后处理提供了一个共同点.XPath Match和XQuery Match是两个最强大的断言,它们都利用命名技术来提供细粒度的消息验证的可能性.我们来看几个例子吧! 1. XPath 断言 XPath断言将指定的XPath表达式应用于接收到的消息,并根据预期值验证生成的节点.如果值与断言通过匹配,否则失败.让我们跳进去,这是一个我们要验证的登录响应消息; <soapenv:Envelope xmlns:s

读取XML文件的指定节点的值 并转换为Item

cmb_State_Send.ItemsSource = null; XmlDocument doc = new XmlDocument(); doc.Load("D:\\模板\\WorkstationState_Config.xml"); //加载Xml文件 XmlElement rootElem = doc.DocumentElement; //获取根节点 XmlNode xn = rootElem.SelectSingleNode("//Workstation[@Nam

用xpath提取xml文档指定标签的内容

1 <?xml version="1.0" encoding="UTF-8"?> 2 <书架> 3 <书> 4 <书名 name="vvvb">何茂赟自传</书名> 5 <作者>何茂赟</作者> 6 <售价>500.00</售价> 7 <售价>1234元</售价><售价>1234元</售价>&

使用Asp.Net中的XmlValidatingReader来验证XML Schema.

这段时间,我正在学习XML,书上介绍使用Xerces-C或Xerces-J来验证XML文档的Schema或DTD,结果,发现上面的工具不好用. 后来,只有放下书,到书店看看,有没有其他什么书能带来帮助.当检到Professiona ASP.NET XML with C# 这本书时,里面讲到了使用System.Xml 和 System.Xml.Schema命名空间下的XmlTextReader类和XmlValidatingReader类来验证带有Schema或DTD的XML文档.便买下来了. 回寝