У меня есть разные типы файлов 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
}
Поскольку некоторые типы узлов дублируются (например, NODE_1 в XML_A, XML_B, XML_D), для каждого типа узла существует один валидатор.
Проблема возникает при обновлении 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 Версия XSD1,0.