2013-03-03 66 views
12

我想集合中的節點,但迭代SelectSingleNode我不斷獲取相同的對象只是node.Id正在改變... 我所嘗試的是讀出給定網站的Web響應,並捕獲一些信息,如值,鏈接..在特殊的定義元素。Html敏捷包SelectSingleNode在迭代中始終給出相同的結果?

int offSet = 0; 
string address = "http://www.testsite.de/ergebnisliste.html?offset=" + offSet; 

HtmlWeb web = new HtmlWeb(); 
//web.OverrideEncoding = Encoding.UTF8; 
HtmlDocument doc = web.Load(address); 

HtmlNodeCollection collection = doc.DocumentNode.SelectNodes("//div[@itemtype='http://schema.org/Posting']"); 

foreach (HtmlNode node in collection) { 
    string id = HttpUtility.HtmlDecode(node.Id); 
    string cpname = HttpUtility.HtmlDecode(node.SelectSingleNode("//span[@itemprop='name']").InnerText); 
    string cptitle = HttpUtility.HtmlDecode(node.SelectSingleNode("//span[@itemprop='title']").InnerText); 
    string cpaddress = HttpUtility.HtmlDecode(node.SelectSingleNode("//span[@itemprop='addressLocality']").InnerText); 
    string date = HttpUtility.HtmlDecode(node.SelectSingleNode("//div[@itemprop='datePosted']").InnerText); 
    string link = "http://www.testsite.de" + HttpUtility.HtmlDecode(node.SelectSingleNode("//div[@class='h3 title']//a[@href]").GetAttributeValue("href", "default"));    
} 

這對於例如1次迭代:

<div id="66666" itemtype="http://schema.org/Posting"> 
<div> 
    <a> 
     <img /> 
    </a> 
</div> 
<div> 
    <div class="h3 title"> 
     <a href="/test.html" title="Test"> 
      <span itemprop="title">Test</span> 
     </a> 
    </div> 
    <div> 
     <span itemprop="name">TestName</span>  
    </div> 
</div> 
<div> 
    <div> 
     <div> 
      <div> 
       <span itemprop="address">Test</span> 
      </div> 
      <span>      
       <a> 
        <span><!-- --></span> 
        <span></span> 
       </a> 
      </span>   
     </div> 
    </div>  
    <div itemprop="date"> 
     <time datetime="2013-03-01">01.03.13</time> 
    </div> 
</div> 

+0

http://stackoverflow.com/questions/6181014/html-agility-pack-problem-selecting-subnode/ 6182495#6182495 – 2013-03-04 05:37:33

回答

35

通過編寫

node.SelectSingleNode("//span[@itemprop='name']").InnerText

這就像你寫

doc.DocumentNode.SelectSingleNode("//span[@itemprop='name']").InnerText

要做你想做的事你應該這樣寫:node.SelectSingleNode(".//span[@itemprop='name']").InnerText

.點/週期告訴make在當前節點上的搜索是node而不是在doc

+0

我開始喜歡XPATH thx Loclip工作得很好.. – Mikatsu 2013-03-03 12:50:48

+0

偉大的anwser!非常感謝Loclip! – 2013-06-09 13:26:08

+0

這個答案是正確的。大起來 – 2015-02-01 00:03:07