【问题标题】:XML Validation avoiding hell implementation避免地狱实现的 XML 验证
【发布时间】:2014-10-09 15:04:25
【问题描述】:

很遗憾,我遇到了 XML 的交叉路径,需要根据当前保存在 XSD 中的规则来验证 XML 数据。

问题是同一个DOC的XML有3个版本,每个版本根据元素的值有不同的规则和子规则。

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

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

我看到一些东西在我的屏幕上用 assert.. 弹开。但 .NET 不支持。是否有某种验证引擎和语法。我真的只希望 1 个文件根据 XML 保存的数据应用规则。

【问题讨论】:

  • 研究使用Schematron,它可以满足您拥有单个规则文件的目标,并能够应用依赖于正在验证的 XML 中的数据值的断言。
  • 谢谢。我遇到了它,但不确定该怎么处理它。所以这次我更多地浏览了这个网站,并试图找到一些指向 .NET 的链接,在仔细阅读之后,我做到了。谢谢

标签: xml xslt xsd .net-4.5


【解决方案1】:

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

下载文件,它有一个基本的 win 表单验证器,或者只是自己打开 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.

【讨论】:

    猜你喜欢
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-01
    • 2018-09-11
    • 2012-06-15
    相关资源
    最近更新 更多