我有不同的 XML 文件类型,看起来像这样:
XML_A:
NODE_1
NODE_2
XML_B:
NODE_1
NODE_2
NODE_3
XML_C:
NODE_2
NODE_3
XML_D:
NODE_1
NODE_3
以及每种类型对应的 XSD 方案并从中生成 C# 类。
现在成像我需要验证这些节点并将它们的值与数据库和彼此进行比较(某种关系验证)。
每个节点都有自己的验证器,并且在所有 XML 文件中都是相同的(例如,NODE_1 在任何地方都具有相同的含义,就像 NODE_2 等一样)。
目前我用这样的东西验证一切:
public bool ValidateNode_1(XElement rootElement)
{
var node_1 = rootElement.XPathSelectElement("....");
//validation logic here
}
由于某些节点类型是重复的(例如 XML_A、XML_B、XML_D 中的 NODE_1),因此每个节点类型都有一个验证器。
当 XML 更新(删除节点或更改其父子关系的新版本)时,问题就出现了。这并不意外,我得到了所有新的计划和课程,所以我可以为此做好准备。但是验证是基于文本的,所以我需要手动更新所有验证器,调整节点名称和 XPath(并且有 100 多个验证器)。
我想要的是使用生成的 C# 类进行验证,因此简单的重构将适用于更改关系的重命名和编译时错误。但由于有多种类型的 XML 文件,我不能这样做:
public bool ValidateNode_1(NodeClass nodeClass)
{
var node_1 = nodeClass.NodeValue;
//validation logic here
}
因为为每个 XML 类型定义了多个 NodeClass 类,即使它们是相同的。它们彼此没有关系,并且位于不同的 C# 命名空间中。尽管 XML 和 XSD 的命名空间是相同的。
所以问题是,如何使用生成的 C# 类进行这种验证,而不是重复每个节点类型的验证器?
PS XSD 版本是 1.0。