XML验证避免地狱实施

时间:2014-10-09 15:04:25

标签: xml xslt xsd .net-4.5

我非常不幸与XML交叉路径,需要根据当前在XSD中保存的规则验证XML数据。

问题是同一DOC的XML有3个版本,每个版本都有基于元素值的单独规则和子规则。

我想知道在过去几年中是否创建了任何可以验证XML的nuget package thing,使用更好的引擎,语法或某些东西来避免使用内置的,旧的和不灵活的.NET垃圾。

我知道的一种方法是解析XML,检查值,例如版本,然后使用XSD和该版本的文件。但是一些规则适用于不同版本的相同元素,即男/女类型问题。从技术上讲,我将不得不从9个XSD文件开始,并在规则变得复杂时更多地登陆。所有版本的所有规则都在使用中,使其更加复杂。

我看到一些东西从我的屏幕反弹断言..但.NET不支持。是否有某种验证引擎和语法。我真的只想要1个文件根据XML所拥有的数据应用规则。

1 个答案:

答案 0 :(得分:0)

是的,谢谢@kjhughes!这就是我所看到的,Schematron“断言”但我认为它只适用于像Perl一样。但进一步调查并发现Schematron.NET

下载文件,它有一个基本的win form验证器,或者只是自己打开DLL项目,查看源代码并编译DLL。

然后在模式中你声明它就像这样。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/po-schematron" xmlns="http://example.com/po-schematron" elementFormDefault="qualified" attributeFormDefault="unqualified">
  <xsd:annotation>
    <xsd:appinfo>
      <schema xmlns="http://www.ascc.net/xml/schematron">

然后你只需要花一些时间阅读Schematron ISO并继续验证XML ..即使你知道你真的不想......但有时你只需要。

Hers is an introduction to Shematron if you never used it or know very little about XPath. It has some sample code and a good enough walkthrough of the whole thing.