C# 使用 XslCompiledTransform 实现 XML 转换
在 C# 开发中,将 XML 数据转换为其他格式(如 HTML)通常借助 XSLT (XSL 转换) 技术实现。本文将展示如何使用 XslCompiledTransform 类,配合 XmlReader 和 XmlWriter,在内存中高效完成这一过程。
转换目标与准备
XSLT 的核心作用是将一种格式的 XML 映射为另一种格式。为了演示,我们需要两组基础数据:
- 输入 XML:包含待转换的结构化数据(例如 CD 列表)。
- XSL 样式表:定义转换逻辑,指定如何将输入节点映射为目标 HTML 标签。
具体操作步骤
第1步:定义 XML 与 XSL 源内容
首先,在代码中定义示例的 XML 字符串和对应的 XSL 样式表字符串。XSL 片段中包含 <xsl:for-each> 循环用于遍历 catalog/cd 节点,并使用 <xsl:value-of> 提取字段值。
string xml = @"<?xml version='1.0' encoding='ISO-8859-1'?>
<catalog>
<cd>
<title>Empire Burlesque</title>
<artist>Bob Dylan</artist>
</cd>
</catalog>";
string xsl = @"<?xml version='1.0' encoding='ISO-8859-1'?>
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:template match='/'>
<html>
<body>
<h2>My CD Collection</h2>
<table border='1'>
<tr bgcolor='#9acd32'>
<th align='left'>Title</th>
<th align='left'>Artist</th>
</tr>
<xsl:for-each select='catalog/cd'>
<tr>
<td><xsl:value-of select='title'/></td>
<td><xsl:value-of select='artist'/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>";
第2步:构建转换辅助方法
创建一个静态方法 XslTransform,接收 XML 内容和 XSL 内容作为参数。该方法内部流程如下:
- 加载 XML:使用
XmlReader.Create读取字节流。 - 加载样式表:实例化
XslCompiledTransform并调用Load方法载入 XSL Reader。 - 设置输出流:配置
XmlWriterSettings(如Indent = true以美化输出),并绑定至StringBuilder以便捕获字符串结果。 - 执行转换:调用
transform.Transform(readerXml, writer)。
static String XslTransform(string inputXmlConent, string inuptXslContent)
{
// 1. 创建 XML 读取器
XmlReader readerXml = XmlReader.Create(new MemoryStream(UTF8Encoding.UTF8.GetBytes(inputXmlConent)));
// 2. 创建 XSL 读取器并加载转换对象
XmlReader readerXsl = XmlReader.Create(new MemoryStream(UTF8Encoding.UTF8.GetBytes(inuptXslContent)));
XslCompiledTransform transform = new XslCompiledTransform();
transform.Load(readerXsl);
// 3. 准备输出缓冲区
StringBuilder sb = new StringBuilder();
XmlWriterSettings Settings = new XmlWriterSettings()
{
Indent = true,
ConformanceLevel = ConformanceLevel.Auto
};
using (XmlWriter writer = XmlWriter.Create(sb, Settings))
{
// 4. 执行转换
transform.Transform(readerXml, writer);
}
return sb.ToString();
}
第3步:调用并验证结果
在主程序中调用上述方法,打印返回的 HTML 字符串。结果应为一个带有基本表格样式的 HTML 文档,展示了从原始 XML 提取的数据。
string result = XslTransform(xml, xsl);
Console.WriteLine(result); // 输出转换后的 HTML 源码
预期输出效果如下(格式已整理):
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<tr>
<td>Empire Burlesque</td>
<td>Bob Dylan</td>
</tr>
</table>
</body>
</html>
注意事项
- 性能优化:
XslCompiledTransform是 .NET 推荐的高性能转换器,相比旧版的XslTransform支持缓存编译后的样式表,适合重复调用场景。 - 资源释放:在实际生产环境中,建议使用
using语句包裹XmlReader和XmlWriter以确保非托管资源被正确释放。
以上就是 C# 实现 XSL 转换的详细内容,更多关于 C# XML 处理技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









