kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 adellam
adellam
Вопрос

Выражение 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) без лишних пробелов. Возможно ли это?

50 2012-08-02T11:57:48+00:00 5
 james.garriss
james.garriss
Редактировал вопрос 25-го февраля 2016 в 4:33
Программирование
xpath
Dimitre Novatchev
Dimitre Novatchev
2-го августа 2012 в 12:39
2012-08-02T12:39:43+00:00
Дополнительно
Источник
Редактировать
#16852285

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

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

Пояснение:

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

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


II. Альтернатива:

translate(/tr/td/a, '   
&#13', '')
Dimitre Novatchev
Dimitre Novatchev
Редактировал ответ 2-го августа 2012 в 12:45
125
0
 Eby
Eby
22-го августа 2016 в 9:23
2016-08-22T09:23:08+00:00
Дополнительно
Источник
Редактировать
#16852286

Пожалуйста, попробуйте ниже выражение XPath :

//td[@class='score-time status']/a[normalize-space() = '16 : 00']
 Rob
Rob
Редактировал ответ 23-го апреля 2018 в 3:25
19
0
 N4553R
N4553R
2-го августа 2012 в 12:21
2012-08-02T12:21:07+00:00
Дополнительно
Источник
Редактировать
#16852283
  • можно проверить, пусты ли узлы text().

    /path/text()[not(.='')]

это может быть полезно с осями типа following-sibling::, если это не контейнеры, или с child::.

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

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

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

  • Вы можете разделить манипуляции с узлами и строками

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

Chris Noe
Chris Noe
Редактировал ответ 29-го июля 2013 в 12:29
2
0
 jerrythebum
jerrythebum
8-го июля 2019 в 2:58
2019-07-08T14:58:33+00:00
Дополнительно
Источник
Редактировать
#16852287

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

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      ']

Используя нормализовать-пространство, его удалить первую пустую узла пространства, и у меня осталось только то, что я хотел

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

['\n        1.0.1\n      ']

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

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

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

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

1.0.1
 jerrythebum
jerrythebum
Редактировал ответ 17-го июля 2019 в 11:17
2
0
Решение / Ответ
 inVader
inVader
2-го августа 2012 в 12:02
2012-08-02T12:02:42+00:00
Дополнительно
Источник
Редактировать
#16852282

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

-17
0
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 2 дня назад
2
Денис Васьков
Зарегистрирован 4 дня назад
3
Dima Patrushev
Зарегистрирован 6 дней назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
JA
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией