2013-03-03 6 views
12

Я хотел бы, чтобы узлы в коллекции, но с итерацией SelectSingleNode Я продолжаю получать один и тот же объект только node.Id меняется ... Что я пытаюсь сделать для считывания webresponse данного сайта и получить некоторую информацию, такую ​​как значения, ссылки .. в специальных определенных элементах.Html Agility Pack 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 –

ответ

35

Написав

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

это как вы пишете

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

Чтобы сделать то, что вы хотите сделать, напишите его следующим образом: node.SelectSingleNode(".//span[@itemprop='name']").InnerText.

Это . точка/период говорит сделать поиск на текущем узле, который node вместо этого на doc

+0

Я начинаю любить XPATH thx Loclip отлично работает .. – Mikatsu

+0

Отличный anwser! Большое спасибо Loclip! –

+0

Этот ответ верный. большой –

 Смежные вопросы

  • Нет связанных вопросов^_^