2015-04-30 108 views
-1

我有一些代碼塊,需要從中獲取數據並嘗試不同版本的xpath命令,但沒有成功。Xpath獲取元素的條件

<div> 
    <div class="some_class"> 
     <a title="id" href="some_href"> 
      <nobr>1<br> 
     </a> 
    </div> 
    <div class="some_other_class"> 
     <a title="name" href="some_href"> 
      <nobr>John<br> 
     </a> 
    </div> 
</div> 

<div> 
    <div class="some_class"> 
     <a title="id" href="some_href"> 
      <nobr>2<br> 
     </a> 
    </div> 
    <div class="some_other_class"> 
     <a title="name" href="some_href"> 
      <nobr>John<br> 
     </a> 
    </div> 
</div> 

// and many blocks like this 

所以,這個div塊是相同的,除了它們的子元素的內容不同。我需要XPath查詢得到約翰的href這<a title="id">等於1

我已經試過這樣的事情:

//div[./div/nobr='1' AND ./div/nobr='John'] 

只得到一個包含數據,我需要DIV,然後不會很難得到John的href。

而且,我已經成功地得到約翰的href用:它不依賴於價值從<a title="id"...>元素

//a[./nobr='John'][@title='name']/@href 

,但這種方式,但它必須依賴於它。

有什麼建議嗎?

+1

如果你想得到「John's href」,爲什麼不創建一個例子,其中的John's href與其他'href'屬性不同,因此你可以清楚地表達你想要的東西? – kjhughes

+1

另外,請注意,XPath僅在格式良好的標記上定義,您的示例並不是這樣:有多個根元素和多個未關閉的元素。 – kjhughes

+0

這不是關於href,我已經明確說過我需要href,它位於John的「超級元素」內部,即約翰是具有我需要的href屬性的標記的子元素。未封閉的元素是一個錯字。謝謝你的慷慨的小說:) –

回答

0

認爲你想要的是

//div/div[a/@title='id']/following-sibling::div[1]/a/@href 

其中,在給定了良好的輸入文檔,將返回(由--------分開的單獨的結果):

href="some_href" 
----------------------- 
href="some_href" 

你沒有解釋它非常清楚,正如kjhughes所指出的,也許你的示例HTML並不理想。

關於你試圖路徑表達式,如輸入爲HTML,它是很難知道

<nobr>John<br> 

是否意味着,「約翰」是nobr元素與否。

0

感謝Mathias,你的例子很有幫助,但是由於@ title ='id'有很多元素,所以它不是可靠的解決方案,它總是會抓住好的元素。

我設法讓解決方法,首先趕上整個div,然後提取我需要的href。

//div[./div/a[@title='name']/nobr='John' and ./div/a[@title='id']/nobr='1'] 
//a[./nobr='John'][@title='name']/@href