Я пытаюсь определить определенный тег с @id, который может быть любым целым числом.
Любое целое число?Даже отрицательный один?
search_string = r'./td[2]/span[re:match(id(), "^\d+$")]/text()'
Кажется неправильным попытаться выбрать атрибут с помощью функции (в данном случае id()
))
Чтобы выбрать someAttribute
элемента, который является узлом контекста (текущим), используйте:
@someAttribute
Вы также хотите утверждать, что значение этого атрибута является целым числом.Это можно сделать в чистом XPath 1.0 без использования какой-либо функции расширения.Приведенное ниже выражение XPath оценивается как true()
именно тогда, когда значение $m
является целым числом:
$m = floor($m)
Итак, они объединены и используются для замены предиката в исходном выражении дайте нам:
search_string = r'./td[2]/span[@id = floor(@id)]/text()'
И, если id
должно быть неотрицательным целым числом (как следует из приведенного регулярного выражения), тогда используйте:
search_string = r'./td[2]/span[@id >= 0 and @id = floor(@id)]/text()'
Использование этих выражений приводит к более переносимому и, вероятно, более эффективному коду.
Обновление : ОП обновил вопрос, сказав, что ему нужно выбратьоснованный на значении атрибута class
, а не на атрибуте id
.
В этом случае два приведенных выше выражения будут изменены на эти:
search_string = r'./td[2]/span[@class = floor(@class )]/text()'
и
search_string = r'./td[2]/span[@class >= 0 and @class = floor(@class )]/text()'