[C#] NSoupライブラリを利用してXMLとHTMLをパーシングする方法


Devlopment note / C#    作成日付 : 2020/04/14 19:34:15   修正日付 : 2020/04/14 19:34:15

こんにちは。明月です。


この投稿はC#でNSoupライブラリを利用してXMLとHTMLをパーシングする方法に関する説明です。


最近、プログラムを作成する時に環境設定ファイルとしてXMLを利用することがあります。以前はXPathを利用してXMLを探索して値を取得しましたが、JQueryのライブラリが登場してCssSelectorエンジン(Sizzle)の概念が生じ、classやidなどのアトリビュートで検索する方法ができました。

NSoupライブラリはXMLやHTML形式にあるファイルやデータをCssSelectorで探索するライブラリです。


個人的にXPathはXMLを探索する時にもっと明確に検索ができますが、Javascriptや様々でCssSelectorをよく使う今はCssSelectorタイプで探索するほうがもっとしやすくなったと思います。


Visual StudioでNSoupライブラリを使うためにNugetを利用してライブラリをダウンロード及び連結しましょう。



私のブログで検索エンジンに登録するようなRSSファイルがあります。


それをNSoupライブラリを利用してタイトルだけ取得します。

using System;
using System.IO;
// HttpWebRequestクラスを利用するため
using System.Net;
// NSoupライブラリ
using NSoup;
using NSoup.Nodes;
class Program
{
  // ウェブページからHtmlファイルを取得するための関数。
  public static string GetRequest(String url)
  {
    // HttpWebRequestでウェブサーバに接続する。
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    // 取得メソッドはGetだ。
    request.Method = "GET";
    // 接続する。
    using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
    {
      // ストリームを取得する。
      using (StreamReader reader = new StreamReader(response.GetResponseStream()))
      {
        // HtmlファイルをStringタイプに返却する。
        return reader.ReadToEnd();
      }
    }
  }
  // 実行関数。
  static void Main(string[] args)
  {
    // 私のブログのrssのURLに接続する。
    var html = GetRequest("https://www.nowonbun.com/rss");
    // html形式のStringをパーシングする。
    Document doc = NSoupClient.Parse(html);
    // item タグを取得する。
    var element = doc.Select("item");
    // elementは複数で取得するので繰り返してコンソールに出力する。
    foreach (var ele in element)
    {
      // Titleのノードテキストを出力する。
      Console.WriteLine(ele.Select("title").Text);
    }
    // css Selectみたいにitemタグの直下のdescriptionタグを検索する。
    element = doc.Select("item > description");
    // elementは複数で取得するので繰り返してデータを書き直す。
    foreach (var ele in element)
    {
      ele.Text("Hello world");
    }
    // コンソールに出力する。
    Console.WriteLine(doc.ToString());

    Console.WriteLine("Press any key...");
    Console.ReadKey();
  }
}


上のxmlファイルを取得してitemのtitleタグのデータをコンソールに出力しました。 Jquryでelement探索することと同じ方法で探索が可能です。

NSoupの場合は探索だけではなく、書き直し機能もあります。


上のdescriptionのテキストを「Hello world」に書き直しました。そのあと、コンソールにxmlを出力しました。


descriptionの部分が「Hello world」になっています。


ここまでC#でNSoupライブラリを利用してXMLとHTMLをパーシングする方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿