我非常不幸与XML交叉路径,需要根据当前在XSD中保存的规则验证XML数据。
问题是同一DOC的XML有3个版本,每个版本都有基于元素值的单独规则和子规则。
我想知道在过去几年中是否创建了任何可以验证XML的nuget package thing
,使用更好的引擎,语法或某些东西来避免使用内置的,旧的和不灵活的.NET垃圾。
我知道的一种方法是解析XML,检查值,例如版本,然后使用XSD和该版本的文件。但是一些规则适用于不同版本的相同元素,即男/女类型问题。从技术上讲,我将不得不从9个XSD文件开始,并在规则变得复杂时更多地登陆。所有版本的所有规则都在使用中,使其更加复杂。
我看到一些东西从我的屏幕反弹断言..但.NET不支持。是否有某种验证引擎和语法。我真的只想要1个文件根据XML所拥有的数据应用规则。
答案 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 ..即使你知道你真的不想......但有时你只需要。