Функция Xpath для удаления пробелов (normalize-space())
-
<span class="views icon-eye">296</span> </span> </div> <div class="ad-meta-data"> <h1 class="title"> Bitmain asic antminer s9 13. 5 th/s (в наличии) </h1> <div class="info"> <span class="date"> Вчера, 23:41 </span> </div> <p class="description"> Bitmain asic antminer s9 13. 5 th/s (в наличии) </p> <a href="/user/1935415">
Здравствуйте.
Из исходного кода страницы нужно вытащить, Title и Description.Действия:
Экшин Xpath получить xml с запросом//p[@class='description']/text()
Descripton получаю с лишними пробелами и переносами строк
" Bitmain asic antminer s9 13. 5 th/s (в наличии) "
В сети узнал что есть встроенная функция normalize-space(), но не пойму как ее прописать в Xpath запрос
-
@solt Она вроде убирает пробелы только у значений параметров атрибутов. Так что удаляй их уже после получения. Кстати там есть получить текст xml тогда не нужная функция text() можно просто //p[@class='description']
-
This post is deleted!
-
@Denis_krsk said in Функция Xpath для удаления пробелов (normalize-space()):
Она вроде убирает пробелы только у значений параметров атрибутов
Вроде нет http://xpoint.ru/know-how/XML/XSLT/CookBook/Trim .
Из этого примера не как не пойму, где ее использовать в запросе
//p[@class='description']/text()
-
@solt Тоже сталкивался с подобной задачей. Покопался немного, не решил через Xpath, зато решил своими любимыми регулярками
:D
.Попробуйте через trim:
[[TEST]] = [[XPATH_TEXT]].trim()
Вот пример.
-
@solt Кстати свою же задачу полугодовалой давности сейчас решил:
@Fox said in Xpath замена параметров в конфиге proxifier:@UA Решил я значит перейти с любимых мной регулярок на Xpath.
На сайте в дереве dom-элементов текст с переносом строки:" Fox "
Если применять экшен Xpath получить текст, то получаешь пробел. Сработал Xpath получить xml
//div[@class="nickname"]/text()[2]
В логе получается идеально, но вот сохраняя в файл вижу:
Fox
И вот с этим мифическим элементом переноса строки
ни как не получается справиться..
trim() не помогает.Вернул регулярку в место Xpath, пока не придумаю как решить.
Оказалось replace легко справляется с 
[[XPATH_XML]] = ([[XPATH_XML]]).replace(/ /g, "") [[TEST]] = [[XPATH_XML]].trim()
Может и вам поможет.
-
@Fox said in Функция Xpath для удаления пробелов (normalize-space()):
Попробуйте через trim:
@Fox said in Функция Xpath для удаления пробелов (normalize-space()):
Оказалось replace легко справляется с 
Спасибо. Хороший вариант. Воспользуюсь вашим способом.
Вопрос останется открытым, т.к. хотелось бы "Убить двух зайцев" одним запросом, что бы минимизировать количество действий/запросов в скрипте.
-
@solt @Fox Я раньше подобные задачи тут http://videlibri.sourceforge.net/cgi-bin/xidelcgi пробовал решать, но уже несколько дней не работает, а аналогичные сервисы все какие-то не какие :( Там было удобно тестить ввел запрос, а тебе сразу результат. Может кстати кто-то подскажет достойную замену сервису?
-
Что то наколдовал (сам пока не пойму что :) ) В код полез в первые, до этого в BAS пользовался только готовыми действиями ("Кубиками")
Если что, поправите (можно так\нельзя\в чем ошибка?)... Пока работает :)
Решил не использовать действие Xpath получить текст для каждого запроса отдельно. А записать все в одно действие "Выполнить код"
VAR_DESCRIPTION = http_client_xpath_xml("//p[@class='description']/text()",!(true)) VAR_DESCRIPTION = VAR_DESCRIPTION.trim() VAR_TITLE = http_client_xpath_xml("//h1/text()",!(true)) VAR_TITLE = VAR_TITLE.trim() VAR_NAME = http_client_xpath_xml("//div[@class='owner-name ']/text()",!(true)) VAR_NAME = VAR_NAME.trim() VAR_DATE = http_client_xpath_xml("//span[@class='date']/text()",!(true)) VAR_DATE = VAR_DATE.trim() VAR_PRICE = http_client_xpath_xml("//span[@class='price float-left']/text()",!(true)) VAR_PRICE = VAR_PRICE.trim() VAR_PHONE = http_client_xpath_xml("//a[@id='phoneCall']/@href",!(true)) VAR_PHONE = VAR_PHONE.trim() VAR_PHONE = VAR_PHONE.replace("tel:", "") VAR_VIEWS = http_client_xpath_xml("//span[@class='views icon-eye']/text()",!(true)) VAR_VIEWS = VAR_VIEWS.trim()
-
@solt said in Функция Xpath для удаления пробелов (normalize-space()):
normalize-space()
Я взялся потестировать эту тему, причем интересовал именно подход с
normalize-space()
Так вот. Ничего работать не будет. Потому что уже вот так должно работать:
normalize-space(//p[@class='description'])
Вот ссылка с онлайн-тестером: https://www.freeformatter.com/xpath-tester.html
Вот ваш фрагмент:
<div class="ad-meta-data"> <h1 class="title"> Bitmain asic antminer s9 13. 5 th/s (в наличии) </h1> <div class="info"> <span class="date"> Вчера, 23:41 </span> </div> <p class="description"> Bitmain asic antminer s9 13. 5 th/s (в наличии) </p> <a href="/user/1935415">asdfgsdfg</a> </div>
Должно работать. А БАС этот квери не может отресолвить. Функция появилась еще в спецификации 1.0. И так же замечательная функция
translate()
не будет работать.
Потому что иcпользуется какой-то HTML-парсер, а не XML. Я об этом уже репортил тут: http://community.bablosoft.com/topic/3584/мелочи-от-зануды/35
-
Тоже долго искал пытался удалить эти пробелы потом решил регуляркой удалить по 2 пробела которые рядом есть и в результате получилось так чтоб все нужные пробелы остались а не нужные ушли спасибо @Fox как всегда выручаешь следующий раз попробую твой вариант