是否可以在 AngleSharp 中获取元素的行号?

Is it possible to get the Line Number of an Element in AngleSharp?

我正在将大型项目中元素的所有内联样式放在一起。我想显示它们所在的行号,类似于下面的示例。

是否可以在 AngleSharp 中获取元素的行号?

        foreach (var file in allFiles)
        {
            string source = File.ReadAllText(file.FullName);

            var parser = new HtmlParser();
            var doc = parser.ParseDocument(source);
            var items = doc.QuerySelectorAll("*[style]");

            sb.AppendLine($"{file.Name} - inline styles({items.Count()})");

            foreach (var item in items)
            {
                sb.AppendLine($"\t\tstyle (**{item.LineNumber}**): {item.GetAttribute("style")}");
            }
        }

是的,这是可能的。

快速示例:

var parser = new HtmlParser(new HtmlParserOptions
{
    IsKeepingSourceReferences = true,
});
var document = parser.ParseDocument("<html><head></head><body><a href=\"example.com/?h=4&w=8\">&foo</a></body></html>");
document.QuerySelector("body").SourceReference?.Position.Dump();

输出如下所示:

重要的部分是使用 IsKeepingSourceReferences 选项,因为这将允许您使用 SourceReference。一些(由解析器/规范插入的)元素可能没有源引用,所以请记住这可能是 null.