В официальной спецификации языка для XPath 2.0 на W3.org указано, что язык действительно поддерживает оператор if . См. Раздел 3.8 Условные выражения , в частности. Наряду с форматом синтаксиса и пояснениями он приводит следующий пример:
if ($widget1/unit-cost < $widget2/unit-cost)
then $widget1
else $widget2
Это предполагает, что у вас не должно быть скобок, окружающих ваши выражения (в противном случае синтаксис выглядит правильным). Я не совсем уверен, но это, безусловно, стоит попробовать. Таким образом, вы захотите изменить свой запрос, чтобы он выглядел так:
if (fn:ends-with(//div [@id='head']/text(),': '))
then fn:substring-before(//div [@id='head']/text(),': ')
else //div [@id='head']/text()
Я действительно подозреваю, что это может исправить это, поскольку тот факт, что ваш движок XPath, похоже, пытается интерпретировать if
как функцию, где на самом деле это особая конструкция языка.
Наконец, чтобы подчеркнуть очевидное, убедитесь, что ваш движок XPath действительно поддерживает XPath 2.0 (в отличие от более ранней версии)! Я не верю, что условные выражения являются частью предыдущих версий XPath.