Безопасный синтаксический анализ и проверка XML - PullRequest
0 голосов
/ 24 ноября 2018

У меня есть разные типы файлов 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.

...