1

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

...

我是angleSharp的新手。

4

1 回答 1

0

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

为简单起见,我假设一个 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;
        }
    }
}

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

希望这可以帮助!

于 2017-12-11T23:15:35.093 回答