2014-03-05 108 views
1

我有一個HTML文件如下:CSQuery選擇元素

<h3> 
    <div id='type'> 
     Type 1 
    </div> 

    <div id='price'> 
     127.76; 
    </div> 
</h3> 

<h3> 
    <div id='type'> 
     Type 2 
    </div> 

    <div id='price'> 
     127.76; 
    </div> 
</h3> 

現在我想用CSQuery提取這些類型和價格成列表,這裏是我工作的代碼:

var doc = CQ.Create(htmlfile);

var types= (from listR in doc["<h3>"] //get the h3 tag 
    select new TypeTest 
    { 
     Typename = listR.GetAttribute("#type"), 
     Price = listR.GetAttribute("#price") 
    } 
    ).ToList(); 
return types; 

但是,我無法得到細節,因爲我不確定當我把它作爲h3時的doc []值。該html文件無法修改。

回答

1

您正在解析的html是無效的格式,即多個相同的id。 (有兩個id='type'id='price),您必須採取以下步驟。

  1. 裝入DOM
  2. 負載類型和價格的div的集合分別。
  3. 使用Zip函數將它們連接在一起並投影到您的對象TypeTest中。

下面是一個工作示例:

// 1 
var doc = CQ.Create(html); 

// 2 
var typeDivs = doc["h3 > div#type"]; 
var priceDivs = doc["h3 > div#price"]; 

// 3 
var types = typeDivs.Zip(priceDivs, (k, v) => new { k, v }) 
    .Select(h => 
     new TypeTest { Typename = h.k.InnerText.Trim(), 
     Price = h.v.InnerText.Trim() }); 
+1

謝謝你,你再幫我,我想這兩種情況下,但隨後仍然無法正常工作,我還是很新的這種類型解析@hutchonoid – bluewonder

+1

@bluewonder沒問題,你去了。一個完整的工作示例。 :) – hutchonoid

+1

@bluewonder嗨,我不幸。值得再問一個問題,我肯定有人能夠回答。 – hutchonoid