LoginSignup
29
23

More than 5 years have passed since last update.

【C#】AngleSharpの使い方メモ

Last updated at Posted at 2018-07-30

C#にてAngleSharpを使う機会があったため、AngleSharp(ver:0.9.10)の一部の使用方法をメモ。
まだ少し改善余地のあるライブラリですが、HTML解析などには十分使用することができると思います。

HTMLをパースする

HTMLをパースするには、HtmlParserクラスのParseメソッドを使用します。

例)文字列(HTML)をパースする方法

//サンプルとして使用するHTML
var htmlText = @"
<html>
    <head>
        <meta charset = 'UTF-8'/>
        <title>AngleSharpの使い方</title>
    </head>
    <body>
        <div id = 'header' name='headerName'>
        <h1 id = 'headerTitle'>AngleSharpの使い方</h1>
        </div>
        <ul id='linkList'>
            <li class = 'link'><a href='@'>トレーニング用リンク1</a></li>
            <li class = 'link'><a href='@'>トレーニング用リンク2</a></li>
        </ul>
     </body>
</html>
";
// HtmlParserクラスをインスタンス化
var parser = new HtmlParser();

// HtmlParserクラスのParserメソッドを使用してパースする。
// Parserメソッドの戻り値の型はIHtmlDocument
var htmlDocument = parser.Parse(htmlText);

要素の取得

要素の指定方法には、従来通りのDOM操作に加えて、
セレクタを用いた取得方法もあるため要素の取得が簡単。

例)条件に一致する要素をすべて取得する方法

// aタグの要素を全て取得する。
var urlElements = htmlDocument.QuerySelectorAll("a");

代表的な要素取得用のプロパティとメソッドは以下の通り。

プロパティ名/メソッド名 取得対象
Head <head>~</head>内の全ての要素
Body <body>~</body>内の全ての要素
Children 対象の全ての子要素
GetElementById() id属性が一致する要素
GetElementsByClassName() class属性が一致する全ての要素
GetElementsByName() name属性が一致する全ての要素
GetElementsByTagName() タグ名が一致する全ての要素
QuerySelector() セレクタの一致する要素
QuerySelectorAll() セレクタの一致する全ての要素

要素の追加

例)指定タグの子要素としてタグを追加する方法

ページ上部のHTMLに新しくリンクを追加する場合。

// liタグ要素を作成する。
var listItem= htmlDocument.CreateElements("li");

// aタグ要素を作成する。
var link = htmlDocument.CreateElement("a");
link.SetAttribute("href","https://www.google.co.jp/");
link.TextContent = "Googleへのリンク";

// liタグにaタグの要素を追加する。
listItem.AppendChild(link);

// 上で作成したliタグの要素をulタグの子要素として追加する。
htmlDocument.GetElementById("ul").AppendChild(listItem);

HTMLの整形

パースした内容をフォーマットして出力してくれる機能もある。
※ver 0.9.10ではhtml、head要素など一部要素のフォーマットが崩れることを確認。

例)HTMLを整形する

// フォーマット後のHTML格納用変数
var sw = new StringWriter();

// フォーマッタ変数
var formatter = new PrettyMarkupFormatter();

// ToHtml関数の第一引数にStringWriter、
// 第二引数にPrettyMarkupFormatterを指定する。
htmlDocument.ToHtml(sw,formatter);
29
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
23