XMLSerialization和XML模式验证

问题描述:

是否可以一起使用XML模式验证和XMLSerializer?XMLSerialization和XML模式验证

我的项目目前使用XMLSerializer。要验证架构,我们正在编程检查值如:

if(String.IsNullOrEmpty(person.Name)) 
    throw new Exception(); 

谢谢!

+0

是架构中存在的'验证'信息吗?或者,是否针对不在模式中的规则检查xml? – 2011-03-28 08:15:58

+0

相似的问题:[模式验证XML](http://*.com/questions/4584080/schema-validation-xml/4639448#4639448) – 2011-03-28 08:23:22

+0

@Devendra:目前,验证规则在代码中实现。但是如果可以使用XML模式验证,验证信息将被放置在XSD文件中。 – Ian 2011-03-28 09:03:06

我建议使用XmlValidatingReader来验证模式。例如,请参阅http://www.codeproject.com/KB/XML/Serialization.aspx ...

+0

XMLValidatingReader在.NET 2.0中已弃用 XmlValidatingReader类在Microsoft .NET Framework 2.0版中已过时。您可以使用XmlReaderSettings类和Create方法创建一个验证XmlReader实例。有关更多信息,请参阅使用XmlReader验证XML数据。 – 2012-08-07 19:04:35

实际上,您可以在XML中提供一个XSD。当您使用XMLSerializer读取它时,如果XML与XSD不匹配,它将引发异常。

您可以使用元素限制元素为xsd添加一些额外的检查。每种类型都有一些可应用于类型/元素的方面 - 从简单的最小/最大长度到正则表达式。

您甚至可以更进一步并使用appinfo xsd元素,您可以在其中添加自定义规范等验证检查。但是,此步骤需要您分别解析每个xml节点,因为正常的Xml架构验证不会触发appinfo功能。

作为最后的手段,你甚至可以看看Schematron,它是一种向xsd添加相当复杂的验证的形式化方法,但它本身有点复杂,并且在很多情况下都是矫枉过正的。