如何在c#中使用XSLT将XML转换为HTML

本文关键字:XML 转换 HTML XSLT | 更新日期: 2023-09-27 18:11:47

我首先创建了一个简单的xslt。用于转换XML对象的样式表。其次,我被困在实际使用xslt样式表进行转换。

背景如下:

我有一个web部件,它本质上是一个有三个输入的小表单。然后提交这些输入,并通过Http get请求用于查询外部API。然后,查询的结果以XML格式显示在单独的页面上。我现在需要的是将xml转换为html并输出它而不是xml。

我现在拥有的:

我有一个字符串变量"tmp",它通过http get请求保存api查询的结果。查询的结果存储在变量中,我可以使用以下方式显示结果:(给出的代码是整个代码的一小段,这是与此特定情况最相关的)

StreamReader reader = new StreamReader(response.GetResponseStream());
string tmp = reader.ReadToEnd();
Response.Write(tmp);
Response.End();

然后使用"tmp"作为XML文档对象,如下所示:

XmlDocument doc = new XmlDocument();
doc.Load(tmp);
然后,我在我的项目中添加了一个用于转换的xslt文件。

这是我卡住的地方:

  1. 我已经创建了上面列出的XML文档对象。然后,如何继续使用添加到项目中的XSLT文件进行转换呢?

  2. 我如何实际实现转换,将输出转换为HTML

我已经纠结了一个星期了

如何在c#中使用XSLT将XML转换为HTML

下面是如何使用XSLT将XML转换为HTML的简单示例:

string tmp = "<XML DATA>";
StringBuilder sbXslOutput = new StringBuilder();   
using (XmlWriter xslWriter = XmlWriter.Create(sbXslOutput))  
{  
    XslCompiledTransform transformer = new XslCompiledTransform();  
    transformer.Load("transformer.xsl");  
    XsltArgumentList args = new XsltArgumentList();  
    XmlDataDocument doc = new XmlDataDocument();
    doc.Loadxml(tmp);
    transformer.Transform(doc, args, xslWriter);  
}  
string dataSetHtml = sbXslOutput.ToString();  

假设这是你的XML:

<RecentMatter>   
  <UserLogin>PSLTP6'RJK</UserLogin>   
  <MatterNumber>99999-2302</MatterNumber>   
  <ClientName>Test Matters</ClientName>   
  <MatterName>DP Test Matter</MatterName>   
  <ClientCode>99999</ClientCode>   
  <OfficeCode/>   
  <OfficeName/>   
  <Billable>true</Billable>   
  <ReferenceId/>   
  <LastUsed>2011-08-23T23:40:24.13+01:00</LastUsed>   
</RecentMatter>   
<RecentMatter>   
  <UserLogin>PSLTP6'RJK</UserLogin>   
  <MatterNumber>999991.0002</MatterNumber>   
  <ClientName>Lathe 1</ClientName>   
  <MatterName>LW Test 2</MatterName>   
  <ClientCode/>   
  <OfficeCode/>   
  <OfficeName/>   
  <Billable>true</Billable>   
  <ReferenceId/>   
  <LastUsed>2011-07-12T16:57:27.173+01:00</LastUsed>   
</RecentMatter>   
<RecentMatter>   
  <UserLogin>PSLTP6'RJK</UserLogin>   
  <MatterNumber>999991-0001</MatterNumber>   
  <ClientName>Lathe 1</ClientName>   
  <MatterName>LW Test 1</MatterName>   
  <ClientCode/>   
  <OfficeCode/>   
  <OfficeName/>   
  <Billable>false</Billable>   
  <ReferenceId/>   
  <LastUsed>2011-07-12T01:59:06.887+01:00</LastUsed>   
</RecentMatter>   
</NewDataSet>   
下面是将XML转换为HTML的XSLT脚本:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">  
  <xsl:template match="/">  
      <table border="1">  
        <tr>  
          <th>User Login</th>  
          <th>Matter Number</th>  
          ...  
        </tr>  
        <xsl:for-each select="NewDataSet/RecentMatter">  
          <tr>  
            <td>  
              <xsl:value-of select="UserLogin"/>  
            </td>  
            <td>  
              <xsl:value-of select="MatterNumber"/>  
            </td>  
            ...  
          </tr>  
        </xsl:for-each>  
      </table>  
  </xsl:template>  
</xsl:stylesheet> 

你可以写一个内存流:

MemoryStream mStream = new MemoryStream();
mXslt.Transform(new XPathDocument(new XmlNodeReader(mXml)), null, mStream );
mStream.Position = 0;
StreamReader mReader = new StreamReader(mStream);
string mOutput = mReader.ReadToEnd();

使用XPathDocumentXslCompiledTransform。它们比XslTransformXmlDocument快得多。即使您使用XmlDocument来创建xml,也要将其转换为XPathDocument来进行转换。

更多信息请参考:最简单的方法转换XML到HTML与XSLT在c# ?