ASP.NET WebForms + XSLT 转换
流程
- C#后端从数据库拿到XML字符串(学生数据)
- 将XML字符串装入
MemoryStream,构建XPathDocument - 读取项目内物理路径的
student.xsl样式表 - 使用
XslCompiledTransform执行XSLT转换,输出HTML字符串 - 把生成的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: XPath