- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 AngleSharp要解析 HTML5,我现在正在做的是用一些 HTML 包装我想要解析的元素,使其成为有效的 HTML5,然后在其上使用解析器,有更好的做法吗?意思是,直接解析特定元素并验证该结构确实是 HTML5?
最佳答案
嗯,举个小例子就好了。但是 AngleSharp 确实支持片段解析,这听起来像你想要的东西。通常,当您设置 InnerHtml
等属性时,也会应用片段解析,它将字符串转换为 DOM 节点。
您可以使用 HtmlParser
类的 ParseFragment
方法来获取给定源代码中包含的节点列表。一个例子:
using AngleSharp.Parser.Html;
// ...
var source = "<div><span class=emphasized>Works!</span></div>";
var parser = new HtmlParser();
var nodes = parser.ParseFragment(source, null);//null = no context given
if (nodes.Length == 0)
Debug.WriteLine("Apparently something bad happened...");
foreach (var node in nodes)
{
// Examine the node
}
通常所有节点都是IText
或IElement
类型。注释 (IComment
) 也是可能的。您永远不会看到附加到此类 INodeList
的 IDocument
或 IDocumentFragment
节点。但是,由于 HTML5 非常健壮,您很可能永远不会在使用此方法时遇到“错误”。
您可以做的是查找(解析)错误。您需要提供一个 IConfiguration
来公开一个收集此类事件的事件聚合器。仅聚合此类事件(不可能添加/删除多个处理程序)的最简单实现如下:
using AngleSharp.Events;
// ...
class SimpleEventAggregator : IEventAggregator
{
readonly List<HtmlParseErrorEvent> _errors = new List<HtmlParseErrorEvent>();
public void Publish<TEvent>(TEvent data)
{
var error = data as HtmlParseErrorEvent;
if (error != null)
_errors.Add(error);
}
public List<HtmlParseErrorEvent> Errors
{
get { return _errors; }
}
public void Subscribe<TEvent>(ISubscriber<TEvent> listener) { }
public void Unsubscribe<TEvent>(ISubscriber<TEvent> listener) { }
}
将事件聚合器与配置一起使用的最简单方法是实例化一个新的(提供的)Configuration
。这里作为示例片段。
using AngleSharp;
// ...
var errorEvents = new SimpleEventAggregator();
var config = new Configuration(events: errorEvents);
请注意:报告的每个错误都是“官方”错误(根据 W3C 规范)。这些错误并不表示提供的代码是恶意的或无效的,只是说明某些内容不符合规范并且必须应用回退。
希望这能回答您的问题。如果没有,请告诉我。
更新 更新了最新版本 AngleSharp 的答案。
关于c# - 如何在 AngleSharp 中只加载特定元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25225474/
我正在使用 AngleSharp 解析文档。我有一个文本节点 (NodeName: "#text"),我想在其中插入一些 HTML。我当然可以将 NodeValue 重置为我想要的任何值,但它仍然是一
无论如何让AngleSharp在解析片段时不创建完整的HTML文档。例如,如果我解析: The Title 我在 DocumentElement.OuterHtml 中得到一个完整的 HTML 文档:
所以我使用的是 .NetFW 4.7.1,并且在实例化 Premailer.Net 时出现以下错误: Could not load type AngleSharp.Parser.Html.HtmlPa
我想知道是否可以使用 AngleSharp 从 HTMLDocument 中提取格式化文本。我正在使用以下代码来提取文本。我遇到的问题是提取的文本一起运行,每个元素之间没有中断。 var parser
我正在使用 AngleSharp 开发有限的浏览器功能.它解析 HTML 的方式让我有点困惑。例如,以下“div”的内容被解析为一个 BR 子元素和一个带有文本“test”的 TextContent
当您没有要使用的类名或 ID 时,找不到许多使用 AngleSharp 进行解析的示例。 HTML 我想从任何 中找到 href标题为 Bing 的标签 在 Python BeautifulS
在 AngleSharp IHtmlAnchorElement 中有 DoClick() 方法。在我的例子中,我需要点击一个 div。我该怎么做? HTML: C#: IHtmlAnchorElem
我开始在一个项目中使用 Anglesharp,我不仅需要获取和下载 HTML,还需要获取和下载文档的图像。我知道在 Document 对象中有一个名为 Images 的属性,但显然它并没有得到所有这些
尝试使用 AngleSharp 解析 HTML 并遇到问题 https://opensource.org/licenses/MS-PL 以下代码在 Linqpad 中运行时返回“0” var url
我将 AngleSharp 和 AngleSharp.Scripting.Javascript 的 nuget 包导入到一个空项目中,以查看在应用 javascript/css 后是否可以从网页解析
对于这个具体的例子,我正在处理 input标签做一些工作并用自定义标签替换它们。输出为 .. var parser = new HtmlParser(); var html = parser.pars
我正在使用 AngleSharp要解析 HTML5,我现在正在做的是用一些 HTML 包装我想要解析的元素,使其成为有效的 HTML5,然后在其上使用解析器,有更好的做法吗?意思是,直接解析特定元素并
我想试试我的手和网页抓取。我注意到 Anglesharp 非常适合 .Net 环境。我正在尝试从 yelp 站点获取所有描述和评级的列表,但我没有收到任何错误或任何结果。这是 html 外观的一个子集
我正在尝试使用 AngleSharp 解析 HTML 网页及其 CSS。遗憾的是,我只找到了折旧的示例,并且我正在努力寻找最新的实现。 目前,我正在尝试这样做: var config = Conf
我能否创建一个 private static readonly HtmlParser HtmlParser = new HtmlParser(); 并在多个线程中安全地使用它? 或者我应该为每个线程或
我正在尝试从下面提到的网站中提取价格。我正在使用 AngleSharp用于提取。在网站上,价格列在下面(作为示例): 650.00 我正在使用以
我正在尝试使用 AngleSharp 库解析一些 HTML,到目前为止它一直很棒。我现在偶然发现了一个我想解析以下 HTML 片段的场景: Link 1 Some text that happens
如何使用 AngleSharp 从 HTML 字符串中找到所有评论标签。评论可以是单行,也可以是多行。 最佳答案 您可以使用 AngleSharp.Extensions.ApiExtensions
与 AngleSharp ,加载 HTML 页面并等待所有样式表下载(如果需要)并且所有脚本都准备好执行解析器,我这样做 public sealed class WebReader {
我有一段这样的代码可以在 AngleSharp 0.9.3 中运行: public IEnumerable FindNodesInStyle(StyleContext context) { i
我是一名优秀的程序员,十分优秀!