Transforms XML data using an XSLT style sheet with C#
Posted on 2011-01-13 11:30 Adam哥 阅读(243) 评论(0) 编辑 收藏 举报准备原始XML文件,如Person.xml:
<?xml version="1.0" encoding="utf-8" ?> <?xml-stylesheet type="text/xsl" href="Person.xslt" ?> <xmlRoot> <PersonInfo> <Name>Adam</Name> <Adress>湖南长沙</Adress> <Gender>男</Gender> </PersonInfo> <PersonInfo> <Name>Eva</Name> <Adress>湖南长沙</Adress> <Gender>女</Gender> </PersonInfo> </xmlRoot>
准备xslt文件,如Person.xslt文件:
此处有几点说明xsl:output节点的 method 属性可以指定输出的格式如html,xml,text等,这里指定输出为html
<?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl" > <xsl:output method="html" indent="yes" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/> <xsl:template match="/"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/> <title>Elfin – Daily Report</title> <style type="text/css"> table { border: 1px solid black; border-collapse: collapse; } table thead tr th { border: 1px solid black; padding: 3px; background-color: #cccccc; } table tbody tr td { border: 1px solid black; padding: 3px; } </style> </head> <body style="font-family: Tahoma, Verdana, Helvetica;"> <table > <tr> <td>姓名</td> <td>地址</td> <td>性别</td> </tr> <xsl:for-each select="/xmlRoot/PersonInfo"> <tr> <td> <xsl:value-of select="Name"/> </td> <td> <xsl:value-of select="Adress"/> </td> <td> <xsl:value-of select="Gender"/> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>
C#的转换代码:
XmlDocument XmlDoc = new XmlDocument(); XmlDoc.Load("Person.xml");//原始xml文档 Stream stream = File.Open("Person.xslt", FileMode.Open); XPathDocument xslDoc = new XPathDocument(stream);//xpath文档 XslCompiledTransform xslt = new XslCompiledTransform(true);//Transforms XML data using an XSLT style sheet MemoryStream outStream = new MemoryStream(); xslt.Load(xslDoc); xslt.Transform(XmlDoc, null, outStream); StringBuilder sb = new StringBuilder(HttpUtility.HtmlEncode(Encoding.UTF8.GetString(outStream.GetBuffer()))); string html = sb.Replace("<", "<").Replace(">", ">").Replace(""", "\"").Replace("&", "&").Replace("\u0000", "").ToString();