Оцените это выражение XPath 1.0 (знаете ли вы, matches()
- это функция XPath 2.0 и не поддерживается в .NET):
Products/Product/descendant::*[contains(text(), 'YourSearchWord')]
Выбирает все элементы, которыеиметь text-node-child, который содержит строку 'YourSearchWord'
и является потомком элемента Product
, который является дочерним элементом элемента Products
, который является дочерним элементом текущего (контекстного) узла.
Вы можете составить выражение XPath с помощью :
string.Format("Products/Product/descendant::*[contains(text(), '{0}')]",
SearchWord )
Однако, если SearchWord
получено из пользовательского ввода, рекомендуется никогда не включать его в скелетную строку, как указано выше., чтобы избежать внедрения XPath.
В этом случае рекомендуется использовать предварительно скомпилированное выражение XPath, в котором пользовательский ввод будет ссылаться как переменная, а значение этой переменной будетвзят из контекста оценки XPath.
Подробнее о том, как предотвратить инъекцию XPath, можно узнать в этом ответе :
https://stackoverflow.com/a/6393690/36305