2013-06-21 71 views
2

我正在構建一個webscraper來獲取網頁的信息。我想要正確的xpath符號來獲取信息。xpath。正確的xpath表示法。

<div class="inner"> 
<div class="col"> 
    <h2><a href="land-in-kadawatha-for-sale-gampaha-442">Land in Kadawatha</a></h2> 
    <div class="meta"> 
     <div class="date"></div> 
     <span class="category">Other Lands</span>, 
    <span class="location">Gampaha</span> 
    </div> 
</div> 

如何訪問使用XPath的 「土地在Kadawatha」。

回答

0

使用此功能:

<xsl:function name="markup:has-class" as="xs:boolean"> 
    <xsl:param name="el" as="element()" /> 
    <xsl:param name="class-name" as="item()" /> 

    <xsl:sequence select="$el/@class and tokenize(upper-case(normalize-space($el/@class)), ' ') = upper-case(string($class-name))" /> 
</xsl:function> 

你可以這樣做:

*[markup:has-class(., 'inner')]/*[markup:has-class(., 'col')]//h2/string() 

相應調整根據您的上下文節點上。

+0

感謝您的幫助 – user2510261

2

獨立的XPath 1無XSL:

//div[contains(concat(" ", @class, " "), " inner ")]/div[contains(concat(" ", @class, " "), " col ")]/h2[1]/a 
+0

什麼是所有的複雜性? '[@ class =「inner」]'有什麼問題,或者如果你想要安全,'[normalize-space(@class)=「inner」]'? –

+1

太過於可靠。他們可以添加新的類,然後這個類可以是'foo inner bar' – BeniBela

0

基礎上片斷

//div[@class='col']/h2/a 

那麼你的代碼看起來像

IWebElement element = driver.FindElement(By.XPath("//div[@class='col']/h2/a")); 
string elementText = element.Text();