現時点でAngleSharpを使用してHTML5を解析していますそれ?つまり、特定の要素を直接解析し、構造が実際に HTML5 であることを検証しますか?
1 に答える
うーん、ちょっとした例がいいでしょう。しかし、AngleSharp はフラグメントの解析をサポートしています。InnerHtml
一般に、フラグメント解析は、文字列を DOM ノードに変換するなどのプロパティを設定するときにも適用されます。
ParseFragment
クラスのメソッドを使用してHtmlParser
、指定されたソース コードに含まれるノードのリストを取得できます。例:
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
orIElement
型になります。コメント ( IComment
) も可能です。そのような にアタッチされたIDocument
またはノードが表示されることはありません。ただし、HTML5 は非常に堅牢であるため、この方法を使用しても「エラー」が発生することはほとんどありません。IDocumentFragment
INodeList
できることは、(解析) エラーを探すことです。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 の最新バージョンの回答を更新しました。