2013-10-12 81 views
1

我寫了一些代碼來使用xpath和Java分析html。 HTML文件是這樣的:Java XPath問題

<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']"); 

但有錯誤。你能給我一些提示嗎?謝謝。 A.

+1

你的第一個XPath爲我工作得很好。你不能檢索文字'信息2'嗎?此外,您的標記有語法錯誤,其中標記沒有關閉標記 – dinukadev

回答

0

您可以根據您的輸入字段(address.B)創建XPath,然後指定你要訪問它的兄弟節點之一,因此檢索其數據...

的XPath:

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

正如您在找到具有id屬性'address.b'的輸入節點後可以看到的,我們指定'following-sibling'。這表明我們想要選擇當前節點之後的同胞之一('address.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.