Перейти к содержимому

Фотография

Исключение тега в XPath

xpath

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 8

#1 SlyFox

SlyFox

    Новый участник

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Карпушин Василий Юрьевич


Отправлено 02 марта 2017 - 12:29

Всем привет!

Ситуация такая:

Есть код:

 

<div id="id">
<b>text1</b>
<br>text2<br>
<br>text3<br>
<i>text4</i> 
</div>
 
Задача состоит в том что в этом диве мне нужно получить текст всех тегов за исключением тега "<i>"
 
Сам пробовал конструкции типа 
.//div[@id='content']/[not(self::i)]
 
Но это не помогло
 
Всем заранее спасибо!

  • 0

#2 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 02 марта 2017 - 12:41

//*[@id='id']/*[not(self::i)]

  • 0

#3 SlyFox

SlyFox

    Новый участник

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Карпушин Василий Юрьевич


Отправлено 02 марта 2017 - 12:50

//*[@id='id']/*[not(self::i)]

Попробовал, помогло, но не совсем. Из моего примера троки text2 и text3 тоже в итоге отрезаются.


  • 0

#4 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 02 марта 2017 - 13:00

 

//*[@id='id']/*[not(self::i)]

Попробовал, помогло, но не совсем. Из моего примера троки text2 и text3 тоже в итоге отрезаются.

 

//*[@id='id']/text() | //*[@id='id']/*[not(self::i)][text()]

  • 0

#5 SlyFox

SlyFox

    Новый участник

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Карпушин Василий Юрьевич


Отправлено 02 марта 2017 - 13:17

 

 

//*[@id='id']/*[not(self::i)]

Попробовал, помогло, но не совсем. Из моего примера троки text2 и text3 тоже в итоге отрезаются.

 

//*[@id='id']/text() | //*[@id='id']/*[not(self::i)][text()]

Класс, но как это описать на Java?

Я получаемый текст делал через getText и записывал в строку. Тоесть так:

String allData = wd.findElement(By.xpath("//*[@id='id']")).getText();

 Мне в итоге надо получить строку.


  • 0

#6 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 02 марта 2017 - 13:28

String allData = wd.findElement(By.xpath("//*[@id='id']/text() | //*[@id='id']/*[not(self::i)][text()]")).getText();

  • 0

#7 SlyFox

SlyFox

    Новый участник

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Карпушин Василий Юрьевич


Отправлено 02 марта 2017 - 13:31

String allData = wd.findElement(By.xpath("//*[@id='id']/text() | //*[@id='id']/*[not(self::i)][text()]")).getText();

На самом деле нет. Потому что  wd.findElement ожидает тип WebElement, а в Вашем случае получается, что он передает строку. Без параметра /text() я тоже пробовал подставить но в итоге так же ничего не получается.

И вообще вываливается исключение

 

org.openqa.selenium.InvalidSelectorException: invalid selector: The result of the xpath expression "//*[@id='content']/text() | //*[@id='content']/*[not(self::i)][text()]" is: [object Text]. It should be an element.
 
 

  • 0

#8 Lzk

Lzk

    Специалист

  • Members
  • PipPipPipPipPip
  • 504 сообщений
  • ФИО:Олег
  • Город:Мск

Отправлено 02 марта 2017 - 13:45

а так не пробовали ?

//*[@id='id'] | //*[@id='id']/*[not(self::i)]

  • 0

#9 SlyFox

SlyFox

    Новый участник

  • Members
  • Pip
  • 8 сообщений
  • ФИО:Карпушин Василий Юрьевич


Отправлено 02 марта 2017 - 13:47

 

а так не пробовали ?

//*[@id='id'] | //*[@id='id']/*[not(self::i)]

Пробовал, там результат в итоге не отличается от исходного.

 

В целом задачу решил, в другом месте с помощью регулярных выражений, но всё же хотелось бы понять на будущее возможно ли решение с помощью исключения xpath


  • 0



Темы с аналогичным тегами xpath

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных