6日間で文献管理アプリを作る(5日目)

メニューバー「ファイル」/「HTML出力」を定義

  • まずは以下の「output_html.cs」を追加
using System;
using System.Windows.Forms;
using System.Xml.Xsl;

namespace 文献管理
{
    public partial class Form1
    {
        void output_html()
        {
            //OpenFileDialogクラスのインスタンスを作成
            OpenFileDialog ofd = new OpenFileDialog();

            //はじめに表示されるフォルダを指定する
            //指定しない(空の文字列)の時は、現在のディレクトリが表示される
            ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);

            //「ファイルの種類」に表示される選択肢を指定する
            ofd.Filter = "XSLファイル(*.xsl)|*.xsl";

            //タイトルを設定する
            ofd.Title = "XSLファイルを選択してください";

            //複数選択を不可にする
            ofd.Multiselect = false;

            //ダイアログを表示する
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string cd = choose_file.Replace(".xml", ".html");
                XslCompiledTransform xslt = new XslCompiledTransform();
                xslt.Load(ofd.FileName);
                xslt.Transform(choose_file, cd);
                MessageBox.Show("HTMLファイルを作成しました");
            }
        }
    }
}
  • 次に例として以下のようなXSLファイルを作成

pubmed_link.xsl

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head><title>文献リスト</title></head>
<body>
<table border="1" align="center">
<caption><font size="+2">文献リスト</font></caption>
<tr>
<th width="8%" bgcolor="silver">PMID</th>
<th bgcolor="silver">title</th>
<th bgcolor="silver">journal</th>
</tr>
<xsl:apply-templates select="//PubmedArticle"/>
</table>
</body>
</html>
</xsl:template>

<xsl:template match="PubmedArticle">
<tr>
<td>
<a>
<xsl:attribute name="href"><xsl:value-of select="concat('http://www.ncbi.nlm.nih.gov/pubmed/', MedlineCitation/PMID)" /></xsl:attribute> 
<xsl:value-of select="MedlineCitation/PMID"/>
</a>
</td>
<td><xsl:value-of select="MedlineCitation/Article/ArticleTitle"/></td>
<td><xsl:value-of select="MedlineCitation/Article/Journal/Title"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>
  • 最後に関数を呼び出すためのコードを追加
        private void hTML出力ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (choose_file != null)
            {
               output_html();
            }
        }