【发布时间】:2017-12-04 11:09:25
【问题描述】:
【问题讨论】:
标签: c# html-parsing anglesharp
【问题讨论】:
标签: c# html-parsing anglesharp
我不确定您所说的“在树视图中”是什么意思,但我会忽略这个特定于域的部分并告诉您如何获取一些节点等(顺便说一下:您引用的页面似乎已过时/错误- 如果您想正确回答问题,请将特定代码 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>
现在我们需要做两件事:
在简单的 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;
}
}
}
这里剩下的是将主题、类别和标题附加到适当的数据容器中以进行显示。但是所有的信息都在那里,你只需要知道你想如何使用/建模它。
希望这会有所帮助!
【讨论】: