【问题标题】:XMLSerialization and XML Schema validationXMLSerialization 和 XML Schema 验证
【发布时间】:2011-07-24 06:55:08
【问题描述】:

是否可以同时使用 XML Schema 验证和 XMLSerializer?

我的项目目前使用 XMLSerializer。为了验证架构,我们以编程方式检查以下值:

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

谢谢!

【问题讨论】:

  • 架构中是否存在“验证”信息?或者是否正在根据架构中不存在的规则检查 xml?
  • 类似问题:schema validation XML
  • @Devendra:目前,验证规则是在代码中实现的。但如果可以使用 XML 模式验证,验证信息将放在 XSD 文件中。
  • 可以在 xml 模式中执行一些验证。有一些属性,如 default、nillable、fixed 等,允许进行基本验证。更复杂的规则将在代码中实现。
  • 在代码中编写规则的替代方法,它们可以用 xml 编写,然后由代码用于验证 xml。

标签: c# xml xml-serialization xsd


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    我建议使用 XmlValidatingReader 来验证架构。例子请看http://www.codeproject.com/KB/XML/Serialization.aspx...

    【讨论】:

    • XMLValidatingReader 在 .NET 2.0 中已弃用 XmlValidatingReader 类在 Microsoft .NET Framework 2.0 版中已过时。您可以使用 XmlReaderSettings 类和 Create 方法创建一个验证 XmlReader 实例。有关详细信息,请参阅使用 XmlReader 验证 XML 数据。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-25
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 2016-02-03
      相关资源
      最近更新 更多