1

我有一个html文件如下:

<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 文件。

4

1 回答 1

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() });
于 2014-03-05T10:19:04.163 回答