2013-03-03 8 views
12

Vorrei i nodi della raccolta ma con iterazione SelectSingleNode Continuo a ottenere lo stesso oggetto solo nodo.Id sta cambiando ... Quello che provo è leggere la risposta di un determinato sito e prendere alcune informazioni come valori, collegamenti .. in speciali elementi definiti.Html Agility Pack SelectSingleNode che dà sempre lo stesso risultato in iterazione?

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"));    
} 

Questo è per esempio per 1 iterazione:

<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 –

risposta

35

Scrivendo

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

è come se la scrittura

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

Per fare ciò che si desidera si dovrebbe scrivere in questo modo: node.SelectSingleNode(".//span[@itemprop='name']").InnerText.

Questo . dot/periodo racconta effettuare una ricerca sul nodo corrente che è node invece su doc

+0

Inizio a piacermi XPATH thx Loclip che funziona alla grande .. – Mikatsu

+0

Great anwser! Grazie mille Loclip! –

+0

Questa risposta è corretta. big up –