サーバーサイド変換

ASP.NET WebForms + XSLT による変換

処理フロー

  1. C#バックエンドがデータベースからXML文字列(生徒データ)を取得
  2. XML文字列を MemoryStream に読み込み、XPathDocument を作成
  3. プロジェクト内の物理パスから student.xsl スタイルシートを読み込む
  4. XslCompiledTransform でXSLT変換を実行し、HTML文字列を出力
  5. 生成したHTMLをフロント側ページへ渡し描画(自身で実装可能。XSLはWeb以外でもテンプレートエンジンとして利用できます)

完全なXMLは各自で用意してください

student.xsl ファイル

プロジェクト内に配置してください

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <!-- 出力形式HTML、文字コードUTF‑8を指定、文字化け対策 -->
    <xsl:output method="html" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <html>
            <head>
                <meta charset="UTF-8"/>
                <title>生徒一覧</title>
            </head>
            <body>
                <ul>
                    <!-- XML構造に対応:ルート→StudentDB→生徒 -->
                    <xsl:for-each select="StudentDB/生徒">
                        <li>
                            番号:<xsl:value-of select="position()"/>
                            氏名:<xsl:value-of select="氏名"/>
                        </li>
                    </xsl:for-each>
                </ul>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>Code language: HTML, XML (xml)

C#による変換処理

using System;
using System.Text;
using System.IO;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace XslDemo.Web
{
    public partial class Default : System.Web.UI.Page
    {
        protected string studentHtml = string.Empty;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //1. BLL層からデータベース出力のXML文字列を取得
                string xml = new BLL.student().GetAllListXml();
                byte[] arr = Encoding.UTF8.GetBytes(xml);
                using (MemoryStream stream = new MemoryStream(arr))
                {
                    XPathDocument xpd = new XPathDocument(stream);
                    string xslPath = Context.Server.MapPath("/student.xsl");

                    // XSLファイル存在確認
                    if (!File.Exists(xslPath))
                    {
                        studentHtml = "XSLスタイルファイルが存在しません!";
                        return;
                    }

                    XslCompiledTransform tran = new XslCompiledTransform();
                    tran.Load(xslPath);

                    StringBuilder sb = new StringBuilder();
                    tran.Transform(xpd, null, new StringWriter(sb));

                    // 【重要】ページ変数へ代入
                    studentHtml = sb.ToString();
                }
            }
        }
    }
}Code language: C# (cs)

aspxへ出力する場合はプレースホルダで置き換えます

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="XslDemo.Web.Default" %>
<!DOCTYPE html>
<html>
<body>
    <%--XSLT変換結果のHTMLを出力--%>
    <%=studentHtml %>
</body>
</html>Code language: HTML, XML (xml)

サーバーサイド変換

Previous:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です