我编写了一些代码来使用xpath和Java解析html。 html 文件类似于:
<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']");
但出现错误。你能给我一些提示吗?谢谢。答:
最佳答案
您可以根据输入字段 (address.B) 创建 XPath,然后指定您想要访问其同级节点之一,从而检索其数据...
X 路径:
//input[@id='address.B']/following-sibling::span[@class='additional_info']
正如您所见,在找到具有 id 属性“address.b”的输入节点后,我们指定“following-sibling”。这表明我们想要选择当前节点('address.B's 输入字段)之后的同级节点之一。然后我们指定属性详细信息后跟哪个节点:span[@class='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.
关于Java XPath 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19362104/