2012-08-01 105 views
0

有沒有一種方法可以獨立於XML文檔來確定xpath返回值的類型?具體來說,我使用lxml。確定查詢的xpath輸出的類型(節點,字符串)

例子:

  • //a//b[a/@href]總是會返回零個或多個元素的列表。
  • //a/text()//a/@href將始終返回零個或多個字符串的列表。

雖然我可以想出各種嘗試分析這些方法的方法,但感覺就像試圖重新發明輪子。有沒有更好的方法來做到這一點?

背景

我很無聊,要趕上例外事實證明時,有沒有任何a標籤和我寫root.xpath('//a')[0]。我不想一味地抓住一切。所以我寫了一組總是返回正確類型的函數。 cssselectorattrib替代品工作得很好,但我不能滿足xpath輸出的期望,而不知道輸出應該是什麼。

如果你真的在意,這是我的代碼。 https://scraperwiki.com/editor/raw/irked

+0

如果您不想捕獲異常,請存儲從xpath返回的列表並檢查長度。或者使用正確的XPath獲取第一個元素:'root.xpath('// a [1]')' – 2012-08-01 16:55:43

+1

實際上,所有四個表達式都會返回節點列表。元素節點爲前兩個,文本節點爲第三個,屬性節點爲第四個。 – 2012-08-01 22:24:24

回答

0

假設您的XPath表達式如//b[a/@href]是靜態的,它將始終返回相同的類型。 (在這種情況下是元素列表。)您只想知道列表是否爲空。簡單的if語句可以這樣做:

results = document.xpath('//b[a/@href]') 
if results: 
    do_something(results[0] 
else: 
    no_result()