网络通信 频道

欧泰的三大武器


【IT168技术文档】

  VS2005里集成的WebBrowser控件,就是一个IE浏览器,如果想用它来相显示XML字符串,并达到IE的效果,我总结了一下,有如下几种方法:
  文件显示法:可以以文件的形式显示!将你要显示的XML串存到本地文件里,并将WebBrowser的Url属性指向这个文件即可!这种方法简易,有效,但不一定实用,因为大部分时间我们要做的工作是将一个XML流显示出来。当然,我们可以将XML流存到一个临时文件里,之后再用第一种方法来显示这个XML串;但是,我们还有更好的方法,不用在本地生成临时文件!
首先,看看IE是怎样显示XML串的。当我们用IE打开XML文件时,在IE里显示的是一个按XML文档格式缩进的,并可以折起和展开的 XML字符串。其实IE只是用它内嵌的XSLT文件,将XML转成了我们看到的html代码。那么同理,我们也可以将我们要显示的XML字符串用XSLT 转换成html代码,并赋给WebBrowser的DocumentText属性。如果你是XSLT高手,那么你可以自己写一段XSLT,之后用如下代码来完成工作:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Xml; using System.Xml.Xsl; using System.IO; namespace WindowsApplication { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { string xml = String.Empty; //Xml字符串 string xslt = String.Empty; //Xslt字符串 XmlReader reader = null; //要转换的Xml MemoryStream readerstream = new MemoryStream(); //要转换的Xml流 XmlWriter writer = null; //转换后的字符串 MemoryStream writerstream = new MemoryStream(); //转换后的字符串流 XslCompiledTransform trans = new XslCompiledTransform(); //Xslt对象 System.Xml.Xsl命名空间下 MemoryStream stream = new MemoryStream(); //Xslt流 XmlReader xsltreader = null; string returnValue = String.Empty; //转换后的html代码 byte[] byteArray = Encoding.UTF8.GetBytes(xslt); try { //取得Xslt流 stream.Write(byteArray, 0, byteArray.Length); xsltreader = XmlReader.Create(stream); //取得要转换的Xml流 byte[] byteXml = Encoding.UTF8.GetBytes(xml); readerstream.Write(byteXml,0,byteXml.Length); reader = XmlReader.Create(readerstream); //取得转换后的字符串流 writer = XmlWriter.Create(writerstream); trans.Load(xsltreader); trans.Transform(reader, writer); writerstream.Position = 0; returnValue = new StreamReader(writerstream).ReadToEnd(); this.webBrowser1.DocumentText = returnValue; //将html代码赋给WebBrowser的DocumentText属性 } finally { readerstream.Close(); writerstream.Close(); stream.Close(); if (reader != null) { reader.Close(); } if (writer != null) { writer.Close(); } if (xsltreader != null) { xsltreader.Close(); } } } } }
0
相关文章