如何在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文件。这是我卡住的地方:
我已经创建了上面列出的XML文档对象。然后,如何继续使用添加到项目中的XSLT文件进行转换呢?
我如何实际实现转换,将输出转换为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();
使用XPathDocument和XslCompiledTransform。它们比XslTransform和XmlDocument快得多。即使您使用XmlDocument来创建xml,也要将其转换为XPathDocument来进行转换。
更多信息请参考:最简单的方法转换XML到HTML与XSLT在c# ?