使用 Markdig 解析 Markdown 以按类型获取部分

Parse Markdown with Markdig to get parts by type

在一个旧项目中,我们使用 Microsoft.Toolkit.Parsers.Markdown 来解析 Markdown 内容。

例如,我们使用该库来获取 MD 块中的标题列表,如下所示:

void Main()
{

    string md = @"
# h1
## h2

Some content.

## h2 bis

some other content
    ";

    var headings = GetHeadings(md);
    headings.Dump();
}

// You can define other methods, fields, classes and namespaces here

private List<string> GetHeadings(string markdownContent)
{
    var document = new Microsoft.Toolkit.Parsers.Markdown.MarkdownDocument();
    document.Parse(markdownContent);

    return document.Blocks
        .Where(block => block.Type == MarkdownBlockType.Header)
        .Select(block => block.ToString()).ToList();
}

现在,我们正在将整个项目移植到更新的版本中。 Microsoft.Toolkit.Parsers.Markdown 现已弃用,Microsoft 建议改用 MarkDig

有没有办法像我们使用 Toolkit 库那样解析 MD 文本并检索不同的块?

如果不是,我可以使用哪些其他库来实现相同的结果?

根据问题评论中e-shcherbo的建议,这个问题可以这样解决:

var document = Markdown.Parse(markdownContent);

return document.Select(b => b as HeadingBlock)
                .Where(b => b != null)
                .Select(hb => hb.Inline.FirstChild.ToString());

我遗漏的部分是 MarkdownDocument 对象本身就是块的集合。相反,要使用 Microsoft.Toolkit.Parsers.Markdown.MarkdownDocument 检索块,您需要访问 Blocks 属性.

更多详情on the source code