C# 使用 XslCompiledTransform 实现 XML 转换

沿途有光
沿途有光
发布时间:2026-10-13 | 3人浏览过
原创

在 C# 开发中,将 XML 数据转换为其他格式(如 HTML)通常借助 XSLT (XSL 转换) 技术实现。本文将展示如何使用 XslCompiledTransform 类,配合 XmlReader 和 XmlWriter,在内存中高效完成这一过程。

转换目标与准备

XSLT 的核心作用是将一种格式的 XML 映射为另一种格式。为了演示,我们需要两组基础数据:

  1. 输入 XML:包含待转换的结构化数据(例如 CD 列表)。
  2. 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 处理技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表