Я не пытаюсь предложить еще одно альтернативное решение, но "мета-взгляд" на эту проблему.
Ответы, уже предоставленные Одедом и Димитром Новатчевым, верны, но то, что на самом деле могут означать люди под фразой «значение есть число», как бы это сказать, открыто для интерпретации.
Вкак все это сводится к этому странному звучанию вопроса: «как вы хотите выразить свои числовые значения?»
Функция XPath number()
обрабатывает числа, имеющие
- возможный начальный или конечный пробел
- предшествующий символ знака только для отрицательных значений
- точка в качестве десятичного разделителя (необязательно для целых чисел)
- все остальные символы из диапазона [0-9]
Обратите внимание, что сюда не входят выражения для числовых значений, которые
- выражаются в экспоненциальной форме (например, 12.3E45)
- может содержать знак для положительных значений
- иметь различие между положительным и отрицательным нулем
- включать значение для положительной или отрицательной бесконечности
Это не просто выдуманные критерии.Элемент с содержимым, которое в соответствии со схемой является допустимым значением xs:float
, может содержать любую из вышеупомянутых характеристик.И все же number()
вернет значение NaN
.
Итак, ответьте на ваш вопрос "Как я могу проверить с помощью XPath, является ли значение узла числом?"это либо «Использовать уже упомянутые решения с использованием number()
», либо «с одним выражением XPath 1.0, вы не можете».Подумайте о возможных форматах чисел, с которыми вы можете столкнуться, и, если необходимо, напишите какую-то логику для проверки / разбора чисел.При обработке XSLT это можно сделать с помощью нескольких подходящих дополнительных шаблонов, например.
PS.Если вас интересуют только ненулевые числа, самый короткий тест -
<xsl:if test="number(myNode)">
<!-- myNode is a non-zero number -->
</xsl:if>