在运行时将 XSLT 样式表应用于 XML 文件






4.33/5 (4投票s)
本文演示了动态地将 XSLT 样式表应用于 XML 文件。
引言
本文介绍了如何在运行时通过应用 XSL 样式表来转换 XML 文件。XML 文件可以静态或动态地转换。要将 XML 文件静态链接到样式表,可以使用以下处理指令:
<?xml-stylesheet type="text/xsl" href="filename.xsl"?>
通过使用 XslCompiledTransform
类的实例,可以将 XML 文件动态链接到样式表。
背景
XML 是一种基于标签的标记语言,主要用于传输数据。由于是文本,XML 受各种硬件和软件平台支持。XML 支持创建用户定义的标签。由于 XML 用于数据表示,因此不能用于显示格式化数据。要显示格式化数据,它使用样式表
。
有两种类型的样式表
,可扩展样式表语言 (XSL) 和层叠样式表 (CSS)。XSL 是 CSS 的超集。它支持 CSS 不支持的各种功能。例如,CSS 不能用于对元素进行排序或进行条件格式化。此外,XSL 的语法与 CSS 不同。XSL 遵循 XML 的语法。
以下是 XSL 的一些元素:
stylesheet
:XSL 文件以<stylesheet>
作为根元素。它的写法如下:<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
template
:<template>
元素用于指定匹配特定节点时要应用的格式化规则。它的写法如下:<xsl:template match="/">
for-each
:<for-each>
元素用于循环访问特定的 XML 元素。它的写法如下:<xsl:for-each select="employees/emp">
value-of
:<value-of>
元素用于显示所选节点的值。如果节点是一个属性,它会以@
为前缀。<xsl:value-of select="@id"/>
以下是我使用的示例 XML 文件 (emp.xml):
以下是我使用的示例 XSL 文件 (emp.xsl):
以下是我使用的示例 XSL 文件 (emptable.xsl):
Using the Code
XslCompiledTransform
类的对象可用于根据 XSL 文件中的指令转换 XML 文件。XslCompiledTransform
类有一个名为 Load()
的方法,该方法加载指定为参数的样式表。XslCompiledTransform
类的 Transform
方法接受两个参数。第一个参数是要转换的 XML 文件,第二个参数是存储转换后输出的 HTML 输出文件。通过使用 Webbrowser 控件的 Navigate
方法导航到输出文件,可以显示转换后的输出。通过使用 Path
类的 GetTempFileName()
方法生成临时文件名来创建临时输出文件。Path
类属于 System.IO
命名空间。使用字符串类的 Replace()
方法将临时文件的扩展名从 .tmp 更改为 .html。
以下是转换的代码:
private void btnView_Click(object sender, EventArgs e)
{
try
{
// Generating a temporary HTML file
string outfile = Path.GetTempFileName().Replace(".tmp", ".html");
// Creating the XslCompiledTransform object
XslCompiledTransform transform = new XslCompiledTransform();
// Loading the stylesheet file from the textbox
transform.Load(txtXSLFileName.Text);
// Transforming the XML file and storing output in HTML file
transform.Transform(txtXMLFileName.Text, outfile);
// Displaying transformed output on a webbrowser control
webBrowser1.Navigate(outfile);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
以下代码用于浏览 XML 文件并在 textbox
中显示它:
private void btnBrowseXML_Click(object sender, EventArgs e)
{
try
{
FileDialog dialog = new OpenFileDialog();
dialog.Filter = "XML files (*.xml)|*.xml|All files (*.*)|*.*";
dialog.FilterIndex = 1;
if (dialog.ShowDialog() == DialogResult.OK)
{
txtXMLFileName.Text = dialog.FileName;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
以下代码用于浏览 XSL 文件并在 textbox
中显示它:
private void btnBrowseXSL_Click(object sender, EventArgs e)
{
try
{
FileDialog dialog = new OpenFileDialog();
dialog.Filter = "Stylesheet files (*.xsl)|*.xsl|All files (*.*)|*.*";
dialog.FilterIndex = 1;
if (dialog.ShowDialog() == DialogResult.OK)
{
txtXSLFileName.Text = dialog.FileName;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
以下代码用于清除 textbox
和 Webbrowser 控件。
private void btnReset_Click(object sender, EventArgs e)
{
txtXMLFileName.Clear();
txtXSLFileName.Clear();
webBrowser1.Navigate("");
}
关注点
注意:使用 XML 相关类需要以下命名空间:
- System.Xml
- System.Xml.Xsl
该项目是使用 Visual C# 2005 Express Edition 创建的。
历史
- 2011 年 12 月 2 日:初始版本