【问题标题】:How to parse tree with all nodes(caption + link) by anglesharp如何通过anglesharp解析所有节点(标题+链接)的树
【发布时间】:2017-12-04 11:09:25
【问题描述】:

如何解析this html code 中的主题节点并获取所有主题节点(及其标题和链接)并最终显示在树视图中?

我是angleSharp的新手。

【问题讨论】:

    标签: c# html-parsing anglesharp


    【解决方案1】:

    我不确定您所说的“在树视图中”是什么意思,但我会忽略这个特定于域的部分并告诉您如何获取一些节点等(顺便说一下:您引用的页面似乎已过时/错误- 如果您想正确回答问题,请将特定代码 sn-p 添加到您的问题中)。

    为简单起见,我假设 HTML 类似

    <body>
      <... some_nesting>
        <div class="topic-class">
          <h2>Topic Title</h2>
          <... some_nesting>
            <div class="category-class">
              <h3>Category Title</h3>
              <... some_nesting>
                <a href="caption-link" class="caption-class">Caption Title</a>
              </...>
              <more ... />
            </div>
            <more ... />
          </...>
        </div>
        <more ... />
      </...>
    </body>
    

    现在我们需要做两件事:

    1. 我们寻找什么(识别标签和结构)
    2. 我们希望如何对我们的发现进行分组(地图层次结构)

    在简单的 HTML 中,我们很容易将 CSS 类识别为标识符(例如,.topic-class.category-class.caption-link),尤其是结合给定的结构和标签。关于分组,我们需要从主题到类别再到标题。

    总而言之,我们可以编写更简洁的 LINQ 或更明确的可读代码来生成分组结构。出于说明目的,我选择后者:

    // document is current document returned from OpenAsync of an IBrowsingContext instance
    var topics = document.QuerySelectorAll("body > .topic-class");
    
    foreach (var topic in topics)
    {
        var topicTitle = topic.QuerySelector("h2")?.TextContent;
        var categories = topic.QuerySelectorAll(".category-class");
    
        foreach (var category of categories)
        {
            var categoryTitle = category.QuerySelector("h3")?.TextContent;
            var captions = category.QuerySelectorAll("a.caption-link");
    
            foreach (IHtmlAnchorElement caption of captions)
            {
                var captionTitle = caption.TextContent;
                var link = caption.Href;
            }
        }
    }
    

    这里剩下的是将主题、类别和标题附加到适当的数据容器中以进行显示。但是所有的信息都在那里,你只需要知道你想如何使用/建模它。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 2022-01-12
      • 1970-01-01
      • 2016-07-05
      • 2020-03-25
      • 2011-08-02
      • 1970-01-01
      • 2019-11-22
      • 2020-01-16
      相关资源
      最近更新 更多