在解析片段时,无论如何让AngleSharp 不创建完整的HTML文档。例如,如果我解析:
DocumentElement.OuterHtml
我在<html><head><title>The Title</title></head><body></body></html>
中获得了完整的HTML文档:
<p>The Paragraph</p>
如果我解析:
<html><head></head><body><p>Hey</p></body></html>
我得到另一个完整的HTML文档:
HEAD
请注意,AngleSharp非常聪明,可以知道我的片段应该去哪里。在一种情况下,它会将其放在BODY
标记中,而在另一种情况下,它会将其放在Body.InnerHtml
标记中。
这很聪明,但如果我只想让片段退出,我就不知道从哪里得到它。所以,我不能只调用Head.InnerHtml
,因为根据我解析的HTML,我的片段可能会在{{1}}中。
有没有办法让AngleSharp不能创建完整的文档,还是有其他方法可以在解析后将我的孤立片段恢复出去?
答案 0 :(得分:2)
现在有可能。以下是从https://github.com/AngleSharp/AngleSharp/issues/594
复制的示例var fragment = "<script>deane</script><div>deane</div>";
var p = new HtmlParser();
var dom = p.Parse("<html><body></body></html>");
var nodes = p.ParseFragment(fragment, dom.Body);
ParseFragment
的第二个参数用于指定片段的解析上下文。在您的情况下,您需要在<title>
的上下文中解析dom.Head
和在p
的{{1}}中进行解析。
哦,哇,这是我刚刚复制的OP自己的代码。
答案 1 :(得分:1)
我了解到这是不可能的。 AngleSharp旨在生成一个完全像HTML规范所说的DOM。如果您使用上面的代码创建HTML文档,请在浏览器中打开它,然后检查DOM,您将找到完全相同的情况。 AngleSharp符合规定。
然后可以操纵的文件。
var html = "<x><y><z>foo</y></z></x>";
var options = new XmlParserOptions()
{
IsSuppressingErrors = true
};
var dom = new XmlParser(options).Parse(html);
这里有一个问题,因为它没有完美地处理实体(这意味着它仍会在这些实体上引发一些错误,即使在被压迫时)。它将在列表中修复。
这是导致这个答案的GitHub问题: