Как использовать xpath для поиска, замены, удаления?

Mihalich

Пользователь
Регистрация
16.08.2016
Сообщения
39
Благодарностей
3
Баллы
8
Делаю так:
1. захожу на сайт
2. выдёргиваю контент в текстовую переменную:
Код:
Tab tab = instance.MainTab;
HtmlElement he =  tab.FindElementByXPath("//div[@class='content-white']",0);
var result = he.InnerHtml;
return result;
Сделал xpath для тех элементов, которые нужно удалить:
//div[@class='t-blue t-rounded-top card-blue phone-full']
//div[@class='constr-card-price card-price l-w100 phone-full']
//div[@class='card-variations-list phone-full']
//div[@class='card-notice']
//div[@class='card-buttons']
//p/b[contains(text(), 'Материал размещен в разделах:')]/parent::*
//p/em[contains(text(), 'Цены в регионах могут отличаться от указанных')]/parent::*

А вот у этого:
//div[@class='cat-block-title is-closed']
Надо заменить DIV на H2

Через регулярки вложенные div-ы мешают удалить родительский div. Да и с xpath прямо одно удовольствие работать.

Нашёл вот такой способ. Но он сложноват.

Какой самый простой способ сделать это на xpath?

Предполагаю, что самый простой способ сохранить найденный фрагмент не в виде текста, а в виде html. А потом работать с ним каким-то методом. Но как это сделать?

Или ещё вариант - может сделать все нужные операции в tab, если это возможно. А потом уже выдернуть контентную область в текст. Только уже почищенную и с заменами.
 

Вложения

Последнее редактирование:

Mihalich

Пользователь
Регистрация
16.08.2016
Сообщения
39
Благодарностей
3
Баллы
8
Ребят, вопрос так и не решился. Если я совсем бред написал - направьте на путь правильный )
Просто хотелось бы по феншую как-то заменять теги. Чтобы просто и 100% безотказно.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 371
Благодарностей
3 295
Баллы
113
Как помню, у зенки это слабое место. HtmlElement можно удалить или заменить имеющимся, но для его создания или полного редактирования - нет доступных методов.

Лучший способ работы с элементами - самому через JS.

Например, получить элемент по xPath (1.0):
JavaScript:
let xPathTarget = document.evaluate(`//div[@class='content-white']`, document.documentElement, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
xPathTarget.singleNodeValue

Заменить уже, как в этих примерах:
https://stackoverflow.com/questions/13389751/change-tag-using-javascript
https://stackoverflow.com/questions/15086677/replace-specific-tag-name-javascript
 

Mihalich

Пользователь
Регистрация
16.08.2016
Сообщения
39
Благодарностей
3
Баллы
8
Спасибо. JS не знаю.
Поэтому использовал мощную прогу Textpipe. Сделал настройку, которая обрабатывает результаты парсинга.
Может кому пригодиться:
так в строчке с нужным куском делаем замену http://joxi.ru/LmGDBBCwvOv12l?d=1 и все операции
замена тега в строчке http://joxi.ru/KAgGaaiEYyjJAl?d=1
удаление http://joxi.ru/a2XQ99IwJjJpAg?d=1
если тег многострочный, то так: http://joxi.ru/12Mj99il6yGBAJ?d=1
если целиком тег со всем внутри http://joxi.ru/Vm67BBS4QNEz2Z?d=1
и вот так строчки целиком не нужные http://joxi.ru/KAx9llSZp9BGr8?d=1
Вот сам файл с настройками.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)