2014-07-24 135 views
0

我剛剛學習如何使用nokogiri寶石紅寶石程序。紅寶石nokogiri解析解析

doc.xpath("//*[@class='someclass']//@href") 

將返回HTML中某處「someclass」類下的所有href值。

doc.xpath("//*[@class='someclass']").xpath("//@href") 

將返回整個HTML中的所有href。

有人能向我解釋怎麼會有人去XPath中使用// @相當於例如,解析數據中,以便像:

doc.xpath("//*[@class='someclass']").xpath(grab all the href within previously parsed) 

是可能的嗎?

使用*,@似乎是相當強大的,但我不能似乎能夠縮小下來,除了通過完整的HTML,無論我用它搜索..

作爲一個初學者,我只是認爲這將是..直觀?要能夠使用「搶來自世界各地的」類型的語法限制在之前已經分析來縮小我的目標,所以我可以做這樣的事情

xpath(whatever).css(whatever).xpath(whatever) 

也許這不是一個好的做法呢?也許更多的理解解析概念,我永遠不會這樣做?有時候我發現使用XPath和CSS更容易..

希望有人能賜教..

回答

1

嘗試從

doc.xpath("//*[@class='someclass']").xpath("//@href") 

改變你的第二個表達

doc.xpath("//*[@class='someclass']").xpath(".//@href") 

//在XPath表達式的開始意味着「文檔根的後代」,而意味着「上下文節點的後代」。

你說得對,XPath功能強大,它的一些主要方面很直觀......但有些重要的部分不直觀,或者取決於你的直覺如何訓練。仔細研究收穫股息,特別是如果您要使用XPath的話!

+1

非常感謝您的快速回答和反饋。我的主要來源是w3school。您是否在意推薦用於學習XPath的任何書籍或資源?將不勝感激..我打算使用XPath很多! – Rok

+0

@Rok:好問題。在過去,我發現w3schools過於簡單化並且經常誤導,但有些帳戶已經改進(http://www.w3fools.com)。無論如何,http://stackoverflow.com/questions/5372312/what-is-an-excellent-xpath-reference-for-learning-correct-usage-of-the-syntax給出了一些好看的地方。 – LarsH

+0

看起來夠開始!謝謝=] – Rok