Ваш XPATH совпадает с любым font
элементом, который является потомком <div class="top-container">
.
div[1]
будет обращаться к первому div
дочернему элементу элемента "top-container". Если вы добавите это в XPATH, он вернет желаемые результаты.
//div[contains(concat(' ',@class,' '),' top-container '))]/div[1]//font/text()
Если вы хотите убедиться, что адресованы только text()
узлы, содержащие "-", то вам также следует добавить фильтр предикатов к text()
.
//div[contains(concat(' ',@class,' '),' top-container '))]/div[1]//font/text()[contains(.,'-')]
Вместо проверки только на узлы
которые содержат "-", как бы вы изменили
последнее выражение, чтобы просто проверить
непустые строки?
Если вы хотите вернуть какой-либо узел text()
со значением, тогда фильтр предикатов для text()
не требуется. Если у текстового узла нет содержимого, то это не текстовый узел, и он не будет выбран.
Однако, , если вы хотите выбрать только text()
узлы, содержащие текст, отличный от пробела , вы можете использовать это выражение:
//div[contains(concat(' ',@class,' '),' top-container '))]/div[1]//font/text()[normalize-space()]
normalize-space()
удаляет все начальные и конечные пробельные символы. Таким образом, если text()
содержит только пробелы (включая
), результат будет нулевым и будет равен false()
в фильтре предикатов, поэтому будет выбран только text()
, содержащий что-то отличное от пробелов.