HTML は Web ページ、オンライン記事、リッチテキストコンテンツに広く使われています。一方 Markdown (.md) は、ドキュメント作成、テクニカルライティング、テキストベースの公開で好まれることが多い形式です。HTML コンテンツを Markdown ベースのワークフローで再利用する必要がある場合、手作業での変換は時間がかかり、ミスも起こりやすくなります。 本チュートリアルでは、Spire.Doc for .NET を使用して C# で HTML を Markdown に変換する手順を順を追って説明します。HTML ファイル、HTML 文字列、ストリームの変換方法、および複数の HTML ファイルのバッチ変換について学びます。 HTML を Markdown に変換する必要がある場面 C# HTML → Markdown 変換ライブラリのインストール C# で HTML ファイルを Markdown に変換する C# で HTML 文字列を Markdown に変換する C# で HTML ストリームを Markdown に変換する 複数 HTML ファイルを一括変換する Markdown に変換可能な HTML 要素 よくある HTML → Markdown 変換の問題のトラブルシューティング HTML を Markdown に変換する必要がある場面 HTML を Markdown に変換すると、Web ベースのコンテンツやリッチテキストコンテンツを、よりシンプルでテキスト中心の形式として再利用できます。一般的なシナリオは次のとおりです。 HTML 記事や CMS コンテンツを Markdown ベースのドキュメントシステムへ移行する GitHub、静的サイトジェネレーター、開発者向けポータル向けのコンテンツを準備する リッチテキストエディターの出力内容を編集可能な Markdown ファイルへ変換する バージョン管理、レビュー、長期メンテナンスのために HTML ページを簡略化する ヘルプセンターの記事、製品説明、ブログコンテンツを .md ファイルとしてエクスポートする C# HTML → Markdown 変換ライブラリのインストール プログラムで HTML を Markdown に変換するには、Spire.Doc for .NET をプロジェクトに追加する必要があります。このスタンドアロンのドキュメント処理ライブラリを使用すると、サーバーに Microsoft Word や Microsoft Office 相互運用機能アセンブリをインストールしなくても、HTML を解析してクリーンな Markdown にエクスポートできます。 方法 1: NuGet パッケージマネージャーからインストールする NuGet パッケージマネージャーコンソールで以下のコマンドを実行します。 Install-Package Spire.Doc 方法 2: DLL を手動でダウンロードして参照 開発環境がオフラインである場合や NuGet を使用しない場合は、ライブラリを手動でダウンロードして参照できます。 ダウンロードと解凍: 公式ダウンロードページから Spire.Doc for .NET パッケージを入手し、解凍します。 参照を追加: Visual Studio のソリューションエクスプローラーで、 依存関係(または参照)を右クリック → 参照の追加 → 参照を選択し、対象の .NET Framework または .NET Core のバージョンに対応したSpire.Doc.dllを指定します。 注意: Markdown サポートは Spire.Doc for .NET バージョン 12.3.12 以降で利用可能です。 C# で HTML ファイルを Markdown に変換する HTML コンテンツがローカルの .html または .htm ファイルとして保存されている場合、Document オブジェクトを使用して直接変換できます。このアプローチは、静的な Web ページ、ドキュメントのエクスポート、オフラインヘルプ記事の処理に最適です。 C# コード例 using Spire.Doc; using Spire.Doc.Documents; namespace ConvertHtmlFileToMarkdown { class Program { static void Main(string[] args) { // using ステートメント内で Document インスタンスを初期化 using (Document document = new Document()) { // ローカルの HTML ファイルを読み込む document.LoadFromFile("input.html", FileFormat.Html, XHTMLValidationType.None); // HTML ファイルを Markdown ファイルにエクスポート document.SaveToFile("output.md", FileFormat.Markdown); } } } } コードの動作: using (Document document = new Document()): 変換処理終了後に Document オブジェクトが適切に解放されるようにします。 LoadFromFile("input.html", FileFormat.Html, XHTMLValidationType.None): 厳密な XHTML 検証なしでソース HTML ファイルを読み込みます。HTML が XHTML ルールに完全に準拠していなくても解析できます。 SaveToFile("output.md", FileFormat.Markdown): 見出し、太字、リスト、画像、リンクなど、サポートされている HTML 要素を Markdown 構文にマッピングし、.md ファイルを生成します。 出力結果 C# で HTML 文字列を Markdown に変換する データベースから取得したコンテンツ、API レスポンス、CMS のリッチテキスト入力など、動的な Web データを扱う場合、生の HTML 文字列を物理ファイルとして保存せずに直接 Markdown に変換できます。 C# コード例 using Spire.Doc; using Spire.Doc.Documents; namespace ConvertHtmlStringToMarkdown { class Program { static void Main(string[] args) { // Document インスタンスを初期化 using (Document document = new Document()) { // 動的な HTML コンテンツを格納するためのセクションと段落を追加 Section section = document.AddSection(); Paragraph paragraph = section.AddParagraph(); // 変換元の HTML 文字列を定義 string htmlString = @" <h1>HTML から Markdown への変換</h1> <p>これは、<a href=&#39;https://jp.e-iceblue.com&#39;>リンク</a>を含むサンプル段落です。</p> <ul> <li>1つ目の項目</li> <li>2つ目の項目</li> <li>3つ目の項目</li> </ul>"; // HTML 文字列を解析し、テキスト段落に直接追加 paragraph.AppendHTML(htmlString); // 構築されたドキュメントモデルを Markdown として保存 document.SaveToFile("html-string-output.md", FileFormat.Markdown); } } } } 主要メソッドの説明: document.AddSection() および section.AddParagraph(): 空の Document オブジェクトには構造レイアウトが含まれていません。生の HTML 文字列コンテンツを挿入する前に、コンテナとして機能する親セクションとテキスト段落を明示的に作成する必要があります。 paragraph.AppendHTML(htmlString): HTML 文字列を解析し、サポートされている HTML 要素をドキュメント構造に挿入します。 出力結果 C# で HTML ストリームを Markdown に変換する クラウド対応のバックエンドエンタープライズアプリケーションでは、HTML コンテンツは固定の物理パスから読み取るのではなく、メモリ内でストリームとして処理されることがよくあります。LoadFromStream() と SaveToStream() を使用すると、メモリ内の HTML コンテンツを Markdown ストリームに直接変換できます。 この方法は、Web サービス、ASP.NET アプリケーション、バックグラウンド処理、変換 API など、ファイルを永続的にディスクへ保存せずにアップロード・変換・返却するシナリオに適しています。 C# コード例 using System.IO; using System.Text; using Spire.Doc; using Spire.Doc.Documents; namespace ConvertHtmlStreamToMarkdown { class Program { static void Main(string[] args) { // メモリ内入力ソースをシミュレートするサンプル HTML 文字列を定義 string htmlContent = "<h1>HTML Stream to Markdown Stream</h1><p>This process happens entirely in memory.</p>"; byte[] htmlBytes = Encoding.UTF8.GetBytes(htmlContent); // HTML バイトから入力ストリームを作成 using (MemoryStream inputStream = new MemoryStream(htmlBytes)) { // 変換された Markdown データを受け取る空のメモリストリームを作成 using (MemoryStream outputStream = new MemoryStream()) { // Document インスタンスを初期化 using (Document document = new Document()) { // 入力ストリームから HTML コンテンツを直接読み込む document.LoadFromStream(inputStream, FileFormat.Html, XHTMLValidationType.None); // 変換されたコンテンツを Markdown として出力ストリームに直接保存 document.SaveToStream(outputStream, FileFormat.Markdown); } // 重要: 読み取り前に出力ストリームの位置を先頭にリセット outputStream.Position = 0; // オプション: 出力ストリームを文字列に変換して結果を確認 (.mdファイルとして保存も可能) using (StreamReader reader = new StreamReader(outputStream, Encoding.UTF8)) { string markdownResult = reader.ReadToEnd(); System.Console.WriteLine(markdownResult); } } } } } } 複数 HTML ファイルを一括変換する 大規模な公開ワークフローの場合、ループを使用して複数の HTML ファイルの Markdown への変換を自動化できます。 C# コード例 以下の例は、ソースフォルダー内のすべての .html ファイルを、出力フォルダー内の .md ファイルに変換します。 using Spire.Doc; using Spire.Doc.Documents; using System; using System.IO; namespace BatchConvertHtmlToMarkdown { internal class Program { static void Main(string[] args) { string inputFolder = @"C:HtmlFiles"; string outputFolder = @"C:MarkdownFiles"; // 出力フォルダーが存在しない場合は作成 Directory.CreateDirectory(outputFolder); // すべての HTML ファイルを取得 string[] htmlFiles = Directory.GetFiles(inputFolder, "*.html"); foreach (string htmlFile in htmlFiles) { try { string fileName = Path.GetFileNameWithoutExtension(htmlFile); string outputPath = Path.Combine(outputFolder, fileName + ".md"); using (Document document = new Document()) { document.LoadFromFile(htmlFile, FileFormat.Html, XHTMLValidationType.None); document.SaveToFile(outputPath, FileFormat.Markdown); } Console.WriteLine($"変換完了: {Path.GetFileName(htmlFile)}"); } catch (Exception ex) { Console.WriteLine($"変換失敗: {Path.GetFileName(htmlFile)}"); Console.WriteLine($"エラー: {ex.Message}"); } } Console.WriteLine("HTML → Markdown バッチ変換が完了しました。"); } } } Markdown に変換可能な HTML 要素 HTML には多くの要素がありますが、Markdown はより小さなドキュメント構造のセットのみをサポートします。変換中、コンテンツ中心の要素は通常、レイアウト中心やスタイル重視の要素よりも保持しやすくなります。たとえば、標準的な Markdown の表は基本的な行と列のみをサポートします。複雑な表が含まれている場合は、代わりに C# で HTML を Excel に変換することを検討してもよいでしょう。 よく使われる HTML 要素と、Markdown での表現の対応表は以下のとおりです。 HTML 要素 Markdown 構文 <h1> ~ <h6> # ~ ###### (見出し) <p> プレーンパラグラフ <strong>, <b> **太字** <em>, <i> *イタリック* <ul>, <ol>, <li> 箇条書きまたは番号付きリスト <a> [リンクテキスト](URL) <img>  <table> Markdown テーブル <code> インラインコード <pre> コードブロック <br> 改行 <div>, <section> 通常は簡略化 CSS スタイル 制限されるか削除 JavaScript サポート対象外 ヒント: 実際の出力は、ソース HTML の構造や、対象のエディターやプラットフォームがサポートする Markdown 機能によって異なる場合があります。 関連記事:C#:Word を HTML に変換する方法 よくある HTML → Markdown 変換の問題のトラブルシューティング 画像が表示されない: 変換後もすべての画像パスが有効であることを確認してください。相対パスは調整が必要な場合があります。 表の見た目が異なる: Markdown は基本的な表のみをサポートします。結合セル、ネストされたレイアウト、カスタムスタイルを含む複雑な表の場合は、変換前に HTML の表を簡素化するか、生成された Markdown の表を手動で後調整してください。 特殊文字が正しく表示されない: これは通常エンコーディングの問題です。ソース HTML ファイルが UTF-8 エンコーディングを使用していることを確認し、生成された Markdown ファイルを UTF-8 対応のエディターで開いてください。 余分な空白行: 変換前に、ソース HTML から不要な空タグ、ネストされた div 要素、冗長な br タグを削除します。生成された Markdown ファイルを Notepad++ などのテキストエディターで開き、検索と置換を行って後処理することもできます。 まとめ Spire.Doc for .NET を使用すると、C# での HTML から Markdown への変換をわずか数行のコードで実装できます。このガイドでは、さまざまな開発シナリオに必要な主要なアプローチを説明しました。 ローカルの HTML ファイルやストリームの Markdown への変換 動的な HTML 文字列の挿入と変換 複数の HTML ファイルの同時バッチ変換 Markdown を PDF に変換するワークフローをお持ちの場合は、C# で Markdown を PDF に変換する方法について、こちらのチュートリアルをご覧ください。 よくある質問 Q1: HTML から Markdown への変換中に画像は保持されますか? A: はい。標準的な HTML の タグは、Markdown の画像構文 () に変換できます。画像を読み込めるように、ソース HTML のリンクで有効な URL または正しいファイルパスが使用されていることを確認してください。 Q2: ファイルを保存せずに HTML 文字列やストリームを Markdown に変換できますか? A: はい。AppendHTML() を使用して HTML 文字列を読み込むか、LoadFromStream() でストリームを読み込み、SaveToStream() を使用してローカルディスクに触れることなく完全にメモリ内でエクスポートできます。 Q3: C# で複数の HTML ファイルを一度に Markdown に変換できますか? A: はい。C# の foreach ループを使用して、フォルダー内の *.html ファイルをスキャンし、コンバーターで各ファイルを処理して、出力先フォルダーに一括出力できます。 Q4: HTML から Markdown への変換に Microsoft Word は必要ですか? A: いいえ。Spire.Doc for .NET はスタンドアロンライブラリであるため、Microsoft Word をインストールする必要はありません。