Упрощенная задача:
• Существует множество файлов XML различной структуры с пространствами имен
• Пользователь определяет несколько предикатов в текстовой форме
•Предикаты применяются к каждому XML-файлу, дающему результат: да или нет
Не ясно, что слово «предикаты» должно означать в приведенном выше описании.
Я предполагаю, что это означает: " Выражения XPath, которые оцениваются как логические "
Если это так, каждое такое отдельное выражение может быть оценено с использованием, например, XPathNavigator.Evaluate (XPathExpression)
Проблема разных пользователей, использующих разные пространства имен, требует централизованного решения.Один из подходов, который я рекомендую, заключается в создании и публикации центрального каталога префикса пространства имен для сопоставлений пространства имен, чтобы авторы выражений использовали только префиксы из этого каталога.Все эти префиксы будут связаны с соответствующими пространствами имен перед оценкой любого выражения XPath..NET класс XmlNamespaceManager
очень подходит для этой цели.Пример использования XmlNamespaceManager
вместе с XpathNavigator.Evaluate()
и XPathNavigator.Select()
можно найти здесь .
Очень важно : Никогда не оценивайте строки, содержащие выражение XPath - это может привести к XPath-инъекции ,Всегда компилируйте строку (например, используя XPathExpression.Compile ()).Даже при соблюдении такой дисциплины оценка предоставленного пользователем выражения XPath может привести к угрозам безопасности.