使用 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。
在一个旧项目中,我们使用 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。