【问题标题】:Parsing HTML with CSQuery使用 CSQuery 解析 HTML
【发布时间】:2014-11-06 02:36:17
【问题描述】:

如何使用 CSQuery 通过 ID 从 div 标记中检索值?

例如,

<h3>
    <div id='type'>
        Room 1
    </div>
    <div id='price'>
        145
    </div>
</h3>

在这种情况下,我想获取 typeprice 中的内容。

【问题讨论】:

  • @ShashankChaturvedi :我不知道如何编写字符串来获取内容,我尝试了 dom.Select("[id = lib_presta").Text() 但它没有成功

标签: c# html asp.net parsing csquery


【解决方案1】:

好的,这是一个完整的工作示例。

HTML

这包括您无法控制的无效/重复 id html

var html = @"<h3>
            <div id='lib_presta'>
                Chambre standard 1 pers du <span class=''>03/03/2014</span>  au <span class=''>05/03/2014 </span>
            </div>
            <div id='prix_presta'>
                127.76 &euro;
            </div>
        </h3><h3>
            <div id='lib_presta'>
                Chambre standard 2 pers du <span class=''>03/03/2014</span>  au <span class=''>05/03/2014 </span>
            </div>
            <div id='prix_presta'>
                227.76 &euro;
            </div>
        </h3>";

C# 代码

这会将 dom 元素通过它们的 id 加载到描述和价格的两个列表中。 然后,它使用两个集合的键值作为HotelNamePrice 属性将它们投影到HotelAvailability 对象列表中。

        CQ dom = html;

        var libs = dom["#lib_presta"];
        var prixs = dom["#prix_presta"];

        var list = libs.Zip(prixs, (k, v) => new { k, v })
          .Select(h => new HotelAvailablity { HotelName = h.k.InnerText.Trim(), Price = h.v.InnerText.Trim() });

在控制台应用程序中运行以上代码进行测试。

【讨论】:

  • 非常感谢,我可以得到它,但请指导我如何返回这些值,然后将其设置到 List 并设置为属性?在这种情况下我可以使用 .ToList() 吗?谢谢
  • 当然不用担心。如果您想在不使用 id 的情况下获取所有 div,您可以简单地执行以下操作: var divList = dom["div"].ToList();
  • 是的,但是我想将名称和价格设置为属性并将它们推送到对象类中。现在它只是从 html 页面获取所有 div 值,我希望将它们分别作为名称和价格。 List&lt;HotelAvailability&gt; list = new List&lt;HotelAvailability&gt;(); list.Add(new HotelAvailability() { HotelName = dom["#lib_presta"].Text(), Price = dom["#prix_presta"].Text() }); 然后它只是将整个值放入 List 的第一个元素中。你有什么想法把它们分成名称和价格吗?谢谢@hutchonoid
  • 如果您要返回几个,您可以添加一个价格类并使用一个类选择器(使用 . 而不是 #)来获取价格,然后循环列表结果并将其添加到您的集合中。
  • @bluewonder 没问题,我认为您可以采用相同的方法,但使用 id 选择器。我认为它仍然会返回一个集合。您是否尝试过使用 var libs = dom["#lib_presta"]; var prixs = dom["#prix_presta"];使用上面的字典方法?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-04
  • 1970-01-01
  • 1970-01-01
  • 2014-10-11
  • 2011-11-15
  • 2011-04-03
  • 2021-07-12
相关资源
最近更新 更多