Я получаю исключение недопустимого токена при попытке оценить выражение ниже через XpathNavigor:

var expression = if(//DovizCins = 'YTL') then '1' else '2';

var nav = doc.CreateNavigator();
XPathExpression xp = XPathExpression.Compile(expression);
var value = nav.Evaluate(xp);

return value?.ToString() ?? string.Empty;

Исключение составляет:

System.Xml.XPath.XPathException: '' if (// DovizCins = 'YTL') then '1' else '2' 'имеет недопустимый токен.'

0
mesut 19 Авг 2020 в 11:34

2 ответа

Лучший ответ

Технология XML от Microsoft сильно устарела. Это синтаксис XPath 2.0, представленный в 2007 году, и Microsoft еще предстоит его догнать: они все еще поставляют XPath 1.0.

0
Michael Kay 19 Авг 2020 в 13:52

Я полностью согласен с Майклом Каем.

Официальная документация MS ошибочна: https://docs.microsoft.com/en-us/dotnet/api/system.xml.xpath?view=netframework-4.7.1

Отрывок

"... Пространство имен System.Xml.XPath содержит классы, которые определяют модель курсора для навигации и редактирования элементов информации XML как экземпляры модели данных XQuery 1.0 и XPath 2.0 ..."

XQuery 1.0 и XPath 2.0 частично поддерживаются MS SQL Server. Инфраструктура .Net не поддерживает XQuery, а его XPath - 1.0.

1
Yitzhak Khabinsky 19 Авг 2020 в 16:02