65.9K
CodeProject 正在变化。 阅读更多。
Home

XSL 转换入门:使用 XSL 渲染 XML 数据 - 获取 HTML 输出

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.71/5 (13投票s)

2009年7月5日

CPOL

3分钟阅读

viewsIcon

135260

downloadIcon

869

初学者入门,使用 XSL 转换渲染 XML 数据,逐步指导使用 XSL 渲染 XML 数据

概述

有时,我们需要以特定格式在我们的 Web 应用程序中显示 XML 数据。 XSLT 提供了以特定格式(如 HTML、PDF 等)显示 XML 文档的能力。 我们可以选择 XML 文件或 XML 文件的部分内容,并使用 XSL 转换以特定格式显示。

SampleFlow

XSL 转换需要一个要转换的 XML 文档和一个XSL 样式表来描述如何进行转换。 然后,XSLT 引擎通过 XSL 样式表转换 XML 文档,并将以样式表指定的格式生成输出。

在这里,我只是想向您展示如何在我们的网页中使用 XSL 显示 XML 数据,这将帮助初学者入门。 这是一个示例应用程序。 我在这里使用的 XSL 非常简单。 如果您想了解有关 XSL 的详细信息,请阅读 W3School 上的教程。

如何实施?

在本节中,我描述了使用 XSL 渲染 XML 数据需要遵循的步骤。 数据的来源可以是任何东西,我们可以从文本文件、数据库或 XML 文件本身加载数据。 但在进行 `XSLTranformation` 时,我们需要提供 XML 数据格式和 XSL 文件路径。

步骤如下所示。

1. 创建数据库

我没有从 XML 读取数据,而是从数据库读取数据。 首先,我创建了一个名为 `Student` 的数据库,其表名为“`StudentDetails`”。该表包含一些虚拟数据,例如

db

图:示例数据

2. 添加 XSL 文件

在从数据库读取数据之前,我们必须创建 XSL 文件。 我们可以通过右键单击项目 > 添加新项目 > 选择 XSLT 文件来添加 XSL 文件。

AddXSL

图:添加新的 XSL 文件

我将 xsl 文件放在一个名为 XSL 的特定文件夹中。 这不是必须将 xsl 文件放在 XSL 文件夹中。 在提供 XSL 渲染的文件路径时,我们必须牢记这一点。

FileH

图:文件结构

3. 设计 XSL

现在,设计 XSL 是一个重要的任务,并且有很多与 XSL 文件设计相关的事情。 在我的例子中,XSL 文件非常简单,设计页面没有任何复杂性,但如果您需要详细了解,我建议您从 W3School 阅读。 首先,看一下我从 `dataset` 得到的 XML 数据。

xml

并且基于此,我们需要设计 XSL 文件。 以下是 `StudentDetails` XSL。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:template match="/">
<table width="100%" align="center" cellpadding="0" cellspacing="0" border="1"
 style="background-color:#123456;font-family:verdana;font-size:10pt;border:1">
<tr>
<td  width="10%"  align="left" >
 Roll</td>
<td width="70%" align="left">
 Name</td>
<td width="20%" align="left">
 Address</td>
</tr>
</table>
<xsl:for-each select="Students/Table">
<table width="100%" align="center" cellpadding="0" cellspacing="0" border="1"
 style="font-family:verdana;font-size:10pt;border:1">
<tr >
<td  width="10%"  align="left"   >
 <xsl:value-of select="Roll"/></td>
<td width="70%" align="left" >
 <xsl:value-of select="Name"/></td>
<td  width="20%" align="left" >
 <xsl:value-of select="Address"/></td>
</tr>
</table>
</xsl:for-each>
 </xsl:template>
</xsl:stylesheet>

XML 根节点以“Students/Table”开头,XSL 将读取每个子节点的内容。 XSL 的以下部分将完成这项工作。

<xsl:for-each select="Students/Table"> 

现在,看一下代码。

我做了什么? 我只是从数据库中读取了数据,并将数据存储在数据集中,然后使用以下方法从数据集中读取 XML 内容

string XMLString=ds.GetXml();

以下是从数据库读取数据并从数据集中读取 XML 字符串的完整代码。

public string strstudentDetails = string.Empty;
 protected void Page_Load(object sender, EventArgs e)
 {
 string    _strConnectionString = "Data Source=.\\sqlexpress;Initial Catalog=Student;
           Integrated Security=True";
 string _strquery = "select * from studentDetails";
 SqlConnection con = new SqlConnection(_strConnectionString);
 DataSet ds = new DataSet("Students");
 SqlDataAdapter da = new SqlDataAdapter(_strquery, con);
 da.Fill(ds);
 //Get the XML From DataSet
 string strXML = ds.GetXml();
 strstudentDetails=GetHtml(Server.MapPath("~/xsl/studentDetails.xsl"), strXML);
 }

现在,我编写了一个函数 `GetHTML`。 `GetHtml` 函数实际上正在执行这项工作。 它将 XSL 样式表和 XML 数据作为参数,执行 XSL 转换并返回 HTML 输出。

 /// <summary>
 /// Get HTML From XML and XSL
 /// </summary>
 ///<param name="xsltPath">XSL File Path</param>
 ///<param name="xml">XML String</param>
 /// <returns>HTML Output</returns>
 public static string GetHtml(string xsltPath, string xml)
 {
 MemoryStream stream = new MemoryStream(ASCIIEncoding.Default.GetBytes(xml));
 XPathDocument document = new XPathDocument(stream);
 StringWriter writer = new StringWriter();
 XslCompiledTransform transform = new XslCompiledTransform();
 transform.Load(xsltPath);
 transform.Transform(document, null, writer);
 return writer.ToString();
 }
 }

现在我们已经获得了 HTML 数据,我们必须将数据显示到页面上。 以下代码用于将实际内容显示到页面中。

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
 <title>Student Page</title>
</head>
<body>
 <form id="form1" runat="server">
<div>
<table >
<tr>
<td>
 <b>Student Info : Displaying using XSL Rendering</b></td>
</tr>
<tr>
<td>
 <%= strstudentDetails %></td>
</tr>
</table>
</div>
</form>
</body>
</html>

现在,运行网站,您将获得以下输出

Output123

希望这能帮助您继续进行 XSL 转换。

感谢阅读!

© . All rights reserved.