2011-07-23 83 views
3

我一直爭取與此代碼現在幾個小時從一個節點集合中選擇單個節點....HtmlAgilityPack - 使用XPath

的結果樣本節點:

<div class="left vcard" sizcache="1" sizset="32"> 
     <h2 class="clearfix fn org url" sizcache="1" sizset="32"> 
      <a id="listItemTitle_11310540" href="/marcali/viragok-viragkuldes/11310540/ANDOK_MATYAS/hirdetes.mtt">ANDÓK MÁTYÁS</a> <a class="removeFromList" href="#">törlés</a> 
     </h2> 
     <p class="description"> 
      2009 decemberében nyitottuk meg az Ezerszirom Virágbolt-ot Marcaliban a Petőfi Sándor u.11-ben. Szeretettel várja a kedves vásárlókat Horváth Györgyike virágkötő, aki 15 éve kápráztatja el kreatíva...</p> 
     <ul class="profession" sizcache="1" sizset="34"> 
      <li sizcache="1" sizset="34"><a href="/szakmak/viragok-viragkuldes/index.mtt">Virágok, virágküldés</a> </li> 
     </ul> 
     <div class="clearfix margined" sizcache="1" sizset="35"> 
      <p class="address adr"> 
       <span>Cím:</span> 8700 Marcali, Petőfi S. utca 11 .</p> 
      <ul class="nav clearfix" sizcache="1" sizset="35"> 
       <li class="mapLink" sizcache="1" sizset="35"><span>-</span><a class="mapLink" href="/terkep/11310540/ANDOK_MATYAS">térképen mutat</a> </li> 
       <li class="routeplanner" sizcache="1" sizset="36"><em>útvonaltervezés</em> <span>-</span> <a onclick="window.location = '/redirect.jspv?method=Redirect&amp;routePlanCount=11310540&amp;url=%2Futvonalterv.jspv%3Fto%3D%26from%3D8700+Marcali%2C+Pet%C5%91fi+S.+utca+11+.%26fromX%3D17.414611005499122%26fromY%3D46.57928886409497%26activeTab%3DrouteSearch&amp;activeTab=routeSearch'" href="#">innen</a> <strong>/</strong> <span>-</span> <a onclick="window.location = '/redirect.jspv?method=Redirect&amp;routePlanCount=11310540&amp;url=%2Futvonalterv.jspv%3Ffrom%3D%26to%3D8700+Marcali%2C+Pet%C5%91fi+S.+utca+11+.%26toX%3D17.414611005499122%26toY%3D46.57928886409497%26activeTab%3DrouteSearch'" href="#">ide</a> </li> 
      </ul> 
      <div class="contacts" sizcache="1" sizset="38"> 
       <div class="phoneHolder clearfix" sizcache="1" sizset="38"> 
        <div class="dt phone"> 
         Telefonszám: 
        </div> 
        <div class="dd phoneValue tel" sizcache="1" sizset="38"> 
         <span>(70) 326 2843</span> <a class="clickToCall" onclick="javascript:openECS('11310540');" href="#">Hívja ingyen!</a> 
        </div> 
       </div> 
       <div class="webLinkHolder" sizcache="1" sizset="39"> 
        <div class="dt webLink clearfix"> 
         Weboldal: 
        </div> 
        <div class="dd webLinkValue" sizcache="1" sizset="39"> 
         <a href="http://www.ezerszirom.hu" rel="blank,nofollow">http://www.ezerszirom.hu</a> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 

而且我的代碼:

  results = htmlDoc.DocumentNode.SelectNodes("//div[contains(@class, 'vcard')]"); 
      if (results != null) 
      { 
       foreach (var node in results) 
       { 
        Response.Write(node.SelectSingleNode("//p[@class='description']").InnerText + "<br>"); 
       } 
      } 

這個問題? 因爲我迭代結果,每個節點應該有自己的描述, 但我得到第一個節點的InnerText。 有什麼想法爲什麼?

回答

9

在XPath中,//代表「從根部遞歸搜索」。因此,查詢不會從您擁有的節點進行搜索,而是從文檔中獲取第一個。

試試這個:

node.SelectSingleNode("descendant::p[@class='description']") 
+0

爲什麼雙 「::」? – Dementic

+0

雙'::'用於[XPath軸](http://www.w3schools.com/xpath/xpath_axes.asp),單個':'用於命名空間前綴。所以如果你有一個前綴'xsi',你可以查詢'descendants :: xsi:*'來獲取'xsi'命名空間中的所有後代元素。 – Lucero

+0

謝謝你!你真的幫助了我。 – Dementic

相關問題