C# CSQuery选择元素

C# CSQuery选择元素,c#,html,asp.net,.net,csquery,C#,Html,Asp.net,.net,Csquery,我有一个html文件,如下所示: <h3> <div id='type'> Type 1 </div> <div id='price'> 127.76; </div> </h3> <h3> <div id='type'> Type 2 </div> <div id='pri

我有一个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.Createhtmlfile

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;

但是,我无法获得我希望的详细信息,因为当我将doc[]值设置为h3时,我不确定它的值。无法修改html文件。

您正在分析的html格式无效,即多个相同id。有两个id='type'和id='price,您必须执行以下步骤

加载dom 分别加载类型和价格div的集合。 使用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() });

谢谢你,你再次帮助了我,我尝试了两种情况,但仍然不起作用,我对这种类型的解析还是很陌生@hutchonoid@bluewonder没问题,给你。完整的工作示例:@你好,我不知道。也许值得再问一个问题,我相信有人会回答的。