Подтвердить что ты не робот

Выражение xpath для удаления пробелов

У меня есть этот HTML:

 <tr class="even  expanded first>
   <td class="score-time status">
     <a href="/matches/2012/08/02/europe/uefa-cup/">

            16 : 00

     </a>
    </td>        
  </tr>

Я хочу извлечь строку (16: 00) без лишних пробелов. Возможно ли это?

4b9b3361

Ответ 1

Получите внутреннее содержимое тегов с помощью xpath-expressen, затем используйте trim() (при условии, что вы используете php) или какую-то эквивалентную функцию, чтобы вырезать пробелы в начале или в конце.

Ответ 2

I. Используйте это одно выражение XPath:

translate(normalize-space(/tr/td/a), ' ', '')

Объяснение

  • normalize-space() создает новую строку из своего аргумента, в которой любой ведущий или конечный белый -пространство (пробел, табуляция, символы NL или CR) удаляется, и любое промежуточное белое пространство заменяется одним пробелом.

  • translate() принимает результат, созданный normalize-space(), и создает новую строку, в которой каждое из оставшихся промежуточных пространств заменяется пустой строкой.


II. В качестве альтернативы

translate(/tr/td/a, ' &#9;&#10;&#13', '')

Ответ 3

Пожалуйста, попробуйте следующее выражение xpath:

//td[@class='score-time status']/a[normalize-space() = '16 : 00']

Ответ 4

  • вы можете проверить, нет ли узлов text().

    /путь/текст() [нет (. = '')]

это может быть полезно с такими осями, как следующий-брат: если они не являются контейнерами или с дочерним::.

  • вы можете использовать функцию string() или функцию regex() для xpath 2.

ПРИМЕЧАНИЕ. В некоторых комментариях говорится, что xpath не может выполнять строковые манипуляции... даже если он не предназначен для этого, вы можете делать основные вещи: contains(), starts-with(), replace().

если вы хотите проверить узлы с узлами, это намного сложнее, поскольку у вас обычно будет набор результатов нодлиста, а большинство функций xpath, например match или replace, будут работать только с одним node.

  • вы можете выделить node и манипулировать строками

Таким образом, вы можете использовать xpath для извлечения контейнера или списка текстовых узлов, а затем обработать его другим языком. (например, java, php, python, perl).

Ответ 5

Я наткнулся на эту тему, когда у меня возникла собственная проблема, аналогичная описанной выше.

HTML

<div class="d-flex">
<h4 class="flex-auto min-width-0 pr-2 pb-1 commit-title">
  <a href="/nsomar/OAStackView/releases/tag/1.0.1">

    1.0.1
  </a>

Команда запуска XPath

tree.xpath('//div[@class="d-flex"]/h4/a/text()')

Однако этот случайный пробел захватил и дал мне вывод:

['\n          ', '\n        1.0.1\n      ']

Используя normalize-space, он удалил первый пробел и оставил мне то, что я хотел

tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')

['\n        1.0.1\n      ']

Затем я мог бы взять первый элемент списка и использовать strip(), чтобы удалить любые дальнейшие пробелы.

Последняя команда XPath

tree.xpath('//div[@class="d-flex"]/h4/a/text()[normalize-space()]')[0].strip()

Что оставило меня именно с тем, что мне требовалось:

1.0.1