2013-10-12 4 views
1

Я написал несколько кодов для разбора html с использованием xpath и Java. Файл HTML является что-то вроде:Java XPath question

<div class="field_row"> 
    <label for="names">Names *</label> 
    <input id="address.A" type="text" maxlength="15" size="32" value="12345" name="address.work"> 
    <span class="additional_info"> Information 1 </span> 
    </div> 
    <div class="field_row"> 
    <label for="names">Names *</label> 
    <input id="address.B" type="text" maxlength="15" size="32" value="12345" name="address.work"> 
    <span class="additional_info"> Information 2 </span> 
    </div> 

И Java коды:

public static final Element INFOFIELD= Element.findXPath(".//*[@class='additional_info'"); 

позволит мне получить 'Информация 1'; однако мне нужно получить «Информацию 2». Поэтому я использую:

public static final Element INFOFIELD= Element.findXPath(".//*[@class='additional_info' and @id='address.B']"); 

Но были ошибки. Не могли бы вы дать мне подсказку, пожалуйста? Благодарю. А.

+1

Ваш первый XPath отлично работает для меня. Не можете ли вы получить текст «Информация 2»? Также ваша разметка имеет синтаксические ошибки, где теги не имеют закрытого тега – dinukadev

ответ

0

Вы можете создать XPath на основе вашего поля ввода (address.B), а затем указать вы хотите получить доступ к одному из своих двойников узлов и таким образом восстановить свои данные ...

XPath:

//input[@id='address.B']/following-sibling::span[@class='additional_info'] 

, как вы можете видеть после того, как мы найдем входной узел с атрибутом id 'address.b', мы укажем 'следующий-sibling'. Это означает, что мы хотим выбрать одного из братьев и сестер после текущего узла (поле ввода адреса.B). Затем мы указываем, какой узел, который следуют детали атрибута: поверочного [@ класс = «ADDITIONAL_INFO»]

некоторые рабочий код реализации выше XPath:

WebElement element = driver.findElement(By.xpath("//input[@id='address.B']/following-sibling::span[@class='additional_info']")); 
System.out.println(element.getText()); 

напечатает «Информация 2»

Вы можете использовать оси XPath другими способами для доступа к другим узлам в DOM (родителям, детям, братьям и сестрам и т. Д.).

http://www.w3schools.com/xpath/xpath_axes.asp

An axis defines a node-set relative to the current node.