この投稿はDart Advent Calendar 2014の13日目の記事です。

html5libは100%Dartで書かれたhtml5のparserです。Pythonのhtml5libからportされました。Dart serverではdart:htmlをimportできない制限があるため、serverでhtmlをparseするにはhtml5libを使用します。Dart Teamが提供しています。

Homepage

https://pub.dartlang.org/packages/html5lib

Parseする

// import
import 'package:html5lib/parser.dart' show parse;

// String htmlをparse
Document document = parse(html);

// 元のString htmlを取得
document.outerHtml


DOM API

dart:htmlと互換性があります。

dart:htmlの知識がそのまま使えるため、他の言語と異なり新たにDOMのAPIを覚える必要がないのが嬉しいですね。 ただし、完全に互換があるわけではなく未だ実装されていないAPIもあるようなので、使いたいAPIがあるか確認しておくほうがいいでしょう。 http://www.dartdocs.org/documentation/html5lib/0.12.0/index.html#html5lib

また、Dartで書かれているので、sourceを読むのが簡単です。使用の前にsourceを読んで構造を把握したりTODOを確認などすることをおすすめします。

XML

html5libはhtmlを取り扱うものであるため、XML関係のAPIは提供されていません。XMLのAPIを扱う場合は他のpubを使用します。 xmlというpubがあります。

https://pub.dartlang.org/packages/xml

こちらはDart teamから提供されているものではありませんが、調べたところこれが一番信頼できるlibraryのようです。(もしもっと良いものがあれば教えて下さい。)

なお、xpath expressionに関しては現状は自前でなんとかする必要があるようです。このアルゴリズムは難しくないので、JSの実装から自分でDartにportするなどして対処可能です。