2013-03-03 28 views
12

Tôi muốn các nút trong bộ sưu tập nhưng với việc chọn SelectSingleNode tôi tiếp tục nhận cùng một đối tượng chỉ node.Id đang thay đổi ... Điều tôi cố gắng là đọc to webresponse của một trang web nhất định và nắm bắt một số thông tin như giá trị, liên kết .. trong các yếu tố được xác định đặc biệt.Gói Agility Html SelectSingleNode cho kết quả luôn giống nhau trong lần lặp?

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

Đây là ví dụ cho 1 lần lặp:

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

Trả lời

35

Bằng cách viết

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

nó giống như bạn viết

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

Để làm những gì bạn muốn làm, bạn nên viết như sau: node.SelectSingleNode(".//span[@itemprop='name']").InnerText.

này . dot/thời gian kể làm một tìm kiếm trên nút hiện tại là node thay vì trên doc

+0

Tôi bắt đầu thích XPATH thx Loclip làm việc tuyệt vời .. – Mikatsu

+0

Great anwser! Cảm ơn bạn rất nhiều Loclip! –

+0

Câu trả lời này là chính xác. lớn lên –

Các vấn đề liên quan